/*
 *  Copyright 2018 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 RTC_BASE_NETWORK_SENT_PACKET_H_
#define RTC_BASE_NETWORK_SENT_PACKET_H_

#include <stddef.h>
#include <stdint.h>

#include <optional>

#include "rtc_base/system/rtc_export.h"

namespace webrtc {

enum class PacketType {
  kUnknown,
  kData,
  kIceConnectivityCheck,
  kIceConnectivityCheckResponse,
  kStunMessage,
  kTurnMessage,
};

enum class PacketInfoProtocolType {
  kUnknown,
  kUdp,
  kDtls,
  kTcp,
  kSsltcp,
  kTls,
};

struct RTC_EXPORT PacketInfo {
  PacketInfo();
  PacketInfo(const PacketInfo& info);
  ~PacketInfo();

  bool included_in_feedback = false;
  bool included_in_allocation = false;
  // `is_media` is true if this is an audio or video packet, excluding
  // retransmissions.
  bool is_media = false;
  PacketType packet_type = PacketType::kUnknown;
  PacketInfoProtocolType protocol = PacketInfoProtocolType::kUnknown;
  // A unique id assigned by the network manager, and std::nullopt if not set.
  std::optional<uint16_t> network_id;
  size_t packet_size_bytes = 0;
  size_t turn_overhead_bytes = 0;
  size_t ip_overhead_bytes = 0;
};

struct RTC_EXPORT SentPacketInfo {
  SentPacketInfo();
  SentPacketInfo(int64_t packet_id, int64_t send_time_ms);
  SentPacketInfo(int64_t packet_id,
                 int64_t send_time_ms,
                 const PacketInfo& info);

  int64_t packet_id = -1;
  int64_t send_time_ms = -1;
  PacketInfo info;
};

}  //  namespace webrtc


#endif  // RTC_BASE_NETWORK_SENT_PACKET_H_
