// THIS FILE IS EXPERIMENTAL. BREAKING CHANGES MAY BE MADE AT ANY TIME
// WITHOUT PRIOR WARNING. THIS FILE SHOULD NOT BE USED IN PRODUCTION CODE.

syntax = "proto2";
option optimize_for = LITE_RUNTIME;
package webrtc.rtclog2;

// At the top level, a WebRTC event log is just an EventStream object. Note that
// concatenating multiple EventStreams in the same file is equivalent to a
// single EventStream object containing the same events. Hence, it is not
// necessary to wait for the entire log to be complete before beginning to
// write it to a file.
// Note: For all X_deltas fields, we rely on the default value being an
// empty string.
message EventStream {
  // Deprecated - Maintained for compatibility with the old event log.
  repeated Event stream = 1 [deprecated = true];
  repeated IncomingRtpPackets incoming_rtp_packets = 2;
  repeated OutgoingRtpPackets outgoing_rtp_packets = 3;
  repeated IncomingRtcpPackets incoming_rtcp_packets = 4;
  repeated OutgoingRtcpPackets outgoing_rtcp_packets = 5;
  repeated AudioPlayoutEvents audio_playout_events = 6;
  // The field tags 7-15 are reserved for the most common events.
  repeated BeginLogEvent begin_log_events = 16;
  repeated EndLogEvent end_log_events = 17;
  repeated LossBasedBweUpdates loss_based_bwe_updates = 18;
  repeated DelayBasedBweUpdates delay_based_bwe_updates = 19;
  repeated AudioNetworkAdaptations audio_network_adaptations = 20;
  repeated BweProbeCluster probe_clusters = 21;
  repeated BweProbeResultSuccess probe_success = 22;
  repeated BweProbeResultFailure probe_failure = 23;
  repeated AlrState alr_states = 24;
  repeated IceCandidatePairConfig ice_candidate_configs = 25;
  repeated IceCandidatePairEvent ice_candidate_events = 26;
  repeated DtlsTransportStateEvent dtls_transport_state_events = 27;
  repeated DtlsWritableState dtls_writable_states = 28;
  repeated GenericPacketSent generic_packets_sent = 29;
  repeated GenericPacketReceived generic_packets_received = 30;
  repeated GenericAckReceived generic_acks_received = 31;
  repeated RouteChange route_changes = 32;

  repeated AudioRecvStreamConfig audio_recv_stream_configs = 101;
  repeated AudioSendStreamConfig audio_send_stream_configs = 102;
  repeated VideoRecvStreamConfig video_recv_stream_configs = 103;
  repeated VideoSendStreamConfig video_send_stream_configs = 104;
}

// DEPRECATED.
message Event {
  // TODO(terelius): Do we want to preserve the old Event definition here?
}

message GenericPacketReceived {
  // All fields are required.
  optional int64 timestamp_ms = 1;
  optional int64 packet_number = 2;
  // Length of the packet in bytes.
  optional int32 packet_length = 3;

  // Provided if there are deltas in the batch.
  optional uint32 number_of_deltas = 16;
  optional bytes timestamp_ms_deltas = 17;
  optional bytes packet_number_deltas = 18;
  optional bytes packet_length_deltas = 19;
}

message GenericPacketSent {
  // All fields are required. All lengths in bytes.
  optional int64 timestamp_ms = 1;
  optional int64 packet_number = 2;
  // overhead+payload+padding length = packet_length in bytes.
  optional int32 overhead_length = 3;
  optional int32 payload_length = 4;
  optional int32 padding_length = 5;

  optional uint32 number_of_deltas = 16;
  optional bytes timestamp_ms_deltas = 17;
  optional bytes packet_number_deltas = 18;
  optional bytes overhead_length_deltas = 19;
  optional bytes payload_length_deltas = 20;
  optional bytes padding_length_deltas = 21;
}

message GenericAckReceived {
  optional int64 timestamp_ms = 1;

  // ID of the received packet.
  optional int64 packet_number = 2;

  // ID of the packet that was acked.
  optional int64 acked_packet_number = 3;

  // Timestamp in ms when the packet was received by the other side.
  optional int64 receive_acked_packet_time_ms = 4;

  optional uint32 number_of_deltas = 16;
  optional bytes timestamp_ms_deltas = 17;
  optional bytes packet_number_deltas = 18;
  optional bytes acked_packet_number_deltas = 19;
  optional bytes receive_acked_packet_time_ms_deltas = 20;
}

message IncomingRtpPackets {
  // required
  optional int64 timestamp_ms = 1;

  // required - RTP marker bit, used to label boundaries between video frames.
  optional bool marker = 2;

  // required - RTP payload type.
  optional uint32 payload_type = 3;

  // required - RTP sequence number.
  optional uint32 sequence_number = 4;

  // required - RTP monotonic clock timestamp (not actual time).
  optional fixed32 rtp_timestamp = 5;

  // required - Synchronization source of this packet's RTP stream.
  optional fixed32 ssrc = 6;

  // TODO(terelius/dinor): Add CSRCs. Field number 7 reserved for this purpose.

  // required - The size (in bytes) of the media payload, not including
  // RTP header or padding. The packet size is the sum of payload, header and
  // padding.
  optional uint32 payload_size = 8;

  // required - The size (in bytes) of the RTP header.
  optional uint32 header_size = 9;

  // required - The size (in bytes) of the padding.
  optional uint32 padding_size = 10;

  // optional - required if the batch contains delta encoded events.
  optional uint32 number_of_deltas = 11;

  // Field numbers 12-14 reserved for future use.

  // Optional header extensions.
  optional uint32 transport_sequence_number = 15;
  optional int32 transmission_time_offset = 16;
  optional uint32 absolute_send_time = 17;
  optional uint32 video_rotation = 18;
  // |audio_level| and |voice_activity| are always used in conjunction.
  optional uint32 audio_level = 19;
  optional bool voice_activity = 20;
  // TODO(terelius): Add other header extensions like playout delay?

  // Delta encodings.
  optional bytes timestamp_ms_deltas = 101;
  optional bytes marker_deltas = 102;
  optional bytes payload_type_deltas = 103;
  optional bytes sequence_number_deltas = 104;
  optional bytes rtp_timestamp_deltas = 105;
  // Field number 107 reserved for CSRC.
  optional bytes ssrc_deltas = 106;
  optional bytes payload_size_deltas = 108;
  optional bytes header_size_deltas = 109;
  optional bytes padding_size_deltas = 110;
  // Field number 111-114 reserved for future use.
  optional bytes transport_sequence_number_deltas = 115;
  optional bytes transmission_time_offset_deltas = 116;
  optional bytes absolute_send_time_deltas = 117;
  optional bytes video_rotation_deltas = 118;
  // |audio_level| and |voice_activity| are always used in conjunction.
  optional bytes audio_level_deltas = 119;
  optional bytes voice_activity_deltas = 120;
}

message OutgoingRtpPackets {
  // required
  optional int64 timestamp_ms = 1;

  // required - RTP marker bit, used to label boundaries between video frames.
  optional bool marker = 2;

  // required - RTP payload type.
  optional uint32 payload_type = 3;

  // required - RTP sequence number.
  optional uint32 sequence_number = 4;

  // required - RTP monotonic clock timestamp (not actual time).
  optional fixed32 rtp_timestamp = 5;

  // required - Synchronization source of this packet's RTP stream.
  optional fixed32 ssrc = 6;

  // TODO(terelius/dinor): Add CSRCs. Field number 7 reserved for this purpose.

  // required - The size (in bytes) of the media payload, not including
  // RTP header or padding. The packet size is the sum of payload, header and
  // padding.
  optional uint32 payload_size = 8;

  // required - The size (in bytes) of the RTP header.
  optional uint32 header_size = 9;

  // required - The size (in bytes) of the padding.
  optional uint32 padding_size = 10;

  // optional - required if the batch contains delta encoded events.
  optional uint32 number_of_deltas = 11;

  // Field numbers 12-14 reserved for future use.

  // Optional header extensions.
  optional uint32 transport_sequence_number = 15;
  optional int32 transmission_time_offset = 16;
  optional uint32 absolute_send_time = 17;
  optional uint32 video_rotation = 18;
  // |audio_level| and |voice_activity| are always used in conjunction.
  optional uint32 audio_level = 19;
  optional bool voice_activity = 20;
  // TODO(terelius): Add other header extensions like playout delay?

  // Delta encodings.
  optional bytes timestamp_ms_deltas = 101;
  optional bytes marker_deltas = 102;
  optional bytes payload_type_deltas = 103;
  optional bytes sequence_number_deltas = 104;
  optional bytes rtp_timestamp_deltas = 105;
  optional bytes ssrc_deltas = 106;
  // Field number 107 reserved for CSRC.
  optional bytes payload_size_deltas = 108;
  optional bytes header_size_deltas = 109;
  optional bytes padding_size_deltas = 110;
  // Field number 111-114 reserved for future use.
  optional bytes transport_sequence_number_deltas = 115;
  optional bytes transmission_time_offset_deltas = 116;
  optional bytes absolute_send_time_deltas = 117;
  optional bytes video_rotation_deltas = 118;
  // |audio_level| and |voice_activity| are always used in conjunction.
  optional bytes audio_level_deltas = 119;
  optional bytes voice_activity_deltas = 120;
}

message IncomingRtcpPackets {
  // required
  optional int64 timestamp_ms = 1;

  // required - The whole packet including both payload and header.
  optional bytes raw_packet = 2;
  // TODO(terelius): Feasible to log parsed RTCP instead?

  // optional - required if the batch contains delta encoded events.
  optional uint32 number_of_deltas = 3;

  // Delta/blob encodings.
  optional bytes timestamp_ms_deltas = 101;
  optional bytes raw_packet_blobs = 102;
}

message OutgoingRtcpPackets {
  // required
  optional int64 timestamp_ms = 1;

  // required - The whole packet including both payload and header.
  optional bytes raw_packet = 2;
  // TODO(terelius): Feasible to log parsed RTCP instead?

  // optional - required if the batch contains delta encoded events.
  optional uint32 number_of_deltas = 3;

  // Delta/blob encodings.
  optional bytes timestamp_ms_deltas = 101;
  optional bytes raw_packet_blobs = 102;
}

message AudioPlayoutEvents {
  // required
  optional int64 timestamp_ms = 1;

  // required - The SSRC of the audio stream associated with the playout event.
  optional uint32 local_ssrc = 2;

  // optional - required if the batch contains delta encoded events.
  optional uint32 number_of_deltas = 3;

  // Delta encodings.
  optional bytes timestamp_ms_deltas = 101;
  optional bytes local_ssrc_deltas = 102;
}

message BeginLogEvent {
  // required
  optional int64 timestamp_ms = 1;

  // required
  optional uint32 version = 2;

  // required
  optional int64 utc_time_ms = 3;
}

message EndLogEvent {
  // required
  optional int64 timestamp_ms = 1;
}

message LossBasedBweUpdates {
  // required
  optional int64 timestamp_ms = 1;

  // TODO(terelius): Update log interface to unsigned.
  // required - Bandwidth estimate (in bps) after the update.
  optional uint32 bitrate_bps = 2;

  // required - Fraction of lost packets since last receiver report
  // computed as floor( 256 * (#lost_packets / #total_packets) ).
  // The possible values range from 0 to 255.
  optional uint32 fraction_loss = 3;

  // TODO(terelius): Is this really needed? Remove or make optional?
  // TODO(terelius): Update log interface to unsigned.
  // required - Total number of packets that the BWE update is based on.
  optional uint32 total_packets = 4;

  // optional - required if the batch contains delta encoded events.
  optional uint32 number_of_deltas = 5;

  // Delta encodings.
  optional bytes timestamp_ms_deltas = 101;
  optional bytes bitrate_bps_deltas = 102;
  optional bytes fraction_loss_deltas = 103;
  optional bytes total_packets_deltas = 104;
}

message DelayBasedBweUpdates {
  // required
  optional int64 timestamp_ms = 1;

  // required - Bandwidth estimate (in bps) after the update.
  optional uint32 bitrate_bps = 2;

  enum DetectorState {
    BWE_UNKNOWN_STATE = 0;
    BWE_NORMAL = 1;
    BWE_UNDERUSING = 2;
    BWE_OVERUSING = 3;
  }
  optional DetectorState detector_state = 3;

  // optional - required if the batch contains delta encoded events.
  optional uint32 number_of_deltas = 4;

  // Delta encodings.
  optional bytes timestamp_ms_deltas = 101;
  optional bytes bitrate_bps_deltas = 102;
  optional bytes detector_state_deltas = 103;
}

// Maps RTP header extension names to numerical IDs.
message RtpHeaderExtensionConfig {
  // Optional IDs for the header extensions. Each ID is a 4-bit number that is
  // only set if that extension is configured.
  // TODO: Can we skip audio level?
  optional int32 transmission_time_offset_id = 1;
  optional int32 absolute_send_time_id = 2;
  optional int32 transport_sequence_number_id = 3;
  optional int32 video_rotation_id = 4;
  optional int32 audio_level_id = 5;
  // TODO(terelius): Add other header extensions like playout delay?
}

message VideoRecvStreamConfig {
  // required
  optional int64 timestamp_ms = 1;

  // required - Synchronization source (stream identifier) to be received.
  optional uint32 remote_ssrc = 2;

  // required - Sender SSRC used for sending RTCP (such as receiver reports).
  optional uint32 local_ssrc = 3;

  // optional - required if RTX is configured. SSRC for the RTX stream.
  optional uint32 rtx_ssrc = 4;

  // IDs for the header extension we care about. Only required if there are
  // header extensions configured.
  optional RtpHeaderExtensionConfig header_extensions = 5;

  // TODO(terelius): Do we need codec-payload mapping? If so and rtx_ssrc is
  // used, we also need a map between RTP payload type and RTX payload type.
}

message VideoSendStreamConfig {
  // required
  optional int64 timestamp_ms = 1;

  // required - Synchronization source (stream identifier) for outgoing stream.
  // When using simulcast, a separate config should be logged for each stream.
  optional uint32 ssrc = 2;

  // optional - required if RTX is configured. SSRC for the RTX stream.
  optional uint32 rtx_ssrc = 3;

  // IDs for the header extension we care about. Only required if there are
  // header extensions configured.
  optional RtpHeaderExtensionConfig header_extensions = 4;

  // TODO(terelius): Do we need codec-payload mapping? If so and rtx_ssrc is
  // used, we also need a map between RTP payload type and RTX payload type.
}

message AudioRecvStreamConfig {
  // required
  optional int64 timestamp_ms = 1;

  // required - Synchronization source (stream identifier) to be received.
  optional uint32 remote_ssrc = 2;

  // required - Sender SSRC used for sending RTCP (such as receiver reports).
  optional uint32 local_ssrc = 3;

  // Field number 4 reserved for RTX SSRC.

  // IDs for the header extension we care about. Only required if there are
  // header extensions configured.
  optional RtpHeaderExtensionConfig header_extensions = 5;

  // TODO(terelius): Do we need codec-payload mapping? If so and rtx_ssrc is
  // used, we also need a map between RTP payload type and RTX payload type.
}

message AudioSendStreamConfig {
  // required
  optional int64 timestamp_ms = 1;

  // required - Synchronization source (stream identifier) for outgoing stream.
  optional uint32 ssrc = 2;

  // Field number 3 reserved for RTX SSRC.

  // IDs for the header extension we care about. Only required if there are
  // header extensions configured.
  optional RtpHeaderExtensionConfig header_extensions = 4;

  // TODO(terelius): Do we need codec-payload mapping? If so and rtx_ssrc is
  // used, we also need a map between RTP payload type and RTX payload type.
}

message AudioNetworkAdaptations {
  // required
  optional int64 timestamp_ms = 1;

  // Bit rate that the audio encoder is operating at.
  // TODO(terelius): Signed vs unsigned?
  optional int32 bitrate_bps = 2;

  // Frame length that each encoded audio packet consists of.
  // TODO(terelius): Signed vs unsigned?
  optional int32 frame_length_ms = 3;

  // Packet loss fraction that the encoder's forward error correction (FEC) is
  // optimized for.
  // Instead of encoding a float, we encode a value between 0 and 16383, which
  // if divided by 16383, will give a value close to the original float.
  // The value 16383 (2^14 - 1) was chosen so that it would give good precision
  // on the one hand, and would be encodable with two bytes in varint form
  // on the other hand.
  optional uint32 uplink_packet_loss_fraction = 4;

  // Whether forward error correction (FEC) is turned on or off.
  optional bool enable_fec = 5;

  // Whether discontinuous transmission (DTX) is turned on or off.
  optional bool enable_dtx = 6;

  // Number of audio channels that each encoded packet consists of.
  optional uint32 num_channels = 7;

  // optional - required if the batch contains delta encoded events.
  optional uint32 number_of_deltas = 8;

  // Delta encodings.
  optional bytes timestamp_ms_deltas = 101;
  optional bytes bitrate_bps_deltas = 102;
  optional bytes frame_length_ms_deltas = 103;
  optional bytes uplink_packet_loss_fraction_deltas = 104;
  optional bytes enable_fec_deltas = 105;
  optional bytes enable_dtx_deltas = 106;
  optional bytes num_channels_deltas = 107;
}

message BweProbeCluster {
  // required
  optional int64 timestamp_ms = 1;

  // required - The id of this probe cluster.
  optional uint32 id = 2;

  // required - The bitrate in bps that this probe cluster is meant to probe.
  optional uint32 bitrate_bps = 3;

  // required - The minimum number of packets used to probe the given bitrate.
  optional uint32 min_packets = 4;

  // required - The minimum number of bytes used to probe the given bitrate.
  optional uint32 min_bytes = 5;
}

message BweProbeResultSuccess {
  // required
  optional int64 timestamp_ms = 1;

  // required - The id of this probe cluster.
  optional uint32 id = 2;

  // required - The resulting bitrate in bps.
  optional uint32 bitrate_bps = 3;
}

message BweProbeResultFailure {
  // required
  optional int64 timestamp_ms = 1;

  // required - The id of this probe cluster.
  optional uint32 id = 2;

  enum FailureReason {
    UNKNOWN = 0;
    INVALID_SEND_RECEIVE_INTERVAL = 1;
    INVALID_SEND_RECEIVE_RATIO = 2;
    TIMEOUT = 3;
  }

  // required
  optional FailureReason failure = 3;
}

message AlrState {
  // required
  optional int64 timestamp_ms = 1;

  // required - True if the send rate is application limited.
  optional bool in_alr = 2;
}

message IceCandidatePairConfig {
  enum IceCandidatePairConfigType {
    UNKNOWN_CONFIG_TYPE = 0;
    ADDED = 1;
    UPDATED = 2;
    DESTROYED = 3;
    SELECTED = 4;
  }

  enum IceCandidateType {
    UNKNOWN_CANDIDATE_TYPE = 0;
    LOCAL = 1;
    STUN = 2;
    PRFLX = 3;
    RELAY = 4;
  }

  enum Protocol {
    UNKNOWN_PROTOCOL = 0;
    UDP = 1;
    TCP = 2;
    SSLTCP = 3;
    TLS = 4;
  }

  enum AddressFamily {
    UNKNOWN_ADDRESS_FAMILY = 0;
    IPV4 = 1;
    IPV6 = 2;
  }

  enum NetworkType {
    UNKNOWN_NETWORK_TYPE = 0;
    ETHERNET = 1;
    WIFI = 2;
    CELLULAR = 3;
    VPN = 4;
    LOOPBACK = 5;
  }

  // required
  optional int64 timestamp_ms = 1;

  // required
  optional IceCandidatePairConfigType config_type = 2;

  // required
  optional uint32 candidate_pair_id = 3;

  // required
  optional IceCandidateType local_candidate_type = 4;

  // required
  optional Protocol local_relay_protocol = 5;

  // required
  optional NetworkType local_network_type = 6;

  // required
  optional AddressFamily local_address_family = 7;

  // required
  optional IceCandidateType remote_candidate_type = 8;

  // required
  optional AddressFamily remote_address_family = 9;

  // required
  optional Protocol candidate_pair_protocol = 10;
}

message IceCandidatePairEvent {
  enum IceCandidatePairEventType {
    UNKNOWN_CHECK_TYPE = 0;
    CHECK_SENT = 1;
    CHECK_RECEIVED = 2;
    CHECK_RESPONSE_SENT = 3;
    CHECK_RESPONSE_RECEIVED = 4;
  }

  // required
  optional int64 timestamp_ms = 1;

  // required
  optional IceCandidatePairEventType event_type = 2;

  // required
  optional uint32 candidate_pair_id = 3;

  // required
  optional uint32 transaction_id = 4;
}

message DtlsTransportStateEvent {
  enum DtlsTransportState {
    UNKNOWN_DTLS_TRANSPORT_STATE = 0;
    DTLS_TRANSPORT_NEW = 1;
    DTLS_TRANSPORT_CONNECTING = 2;
    DTLS_TRANSPORT_CONNECTED = 3;
    DTLS_TRANSPORT_CLOSED = 4;
    DTLS_TRANSPORT_FAILED = 5;
  }

  // required
  optional int64 timestamp_ms = 1;

  // required
  optional DtlsTransportState dtls_transport_state = 2;
}

message DtlsWritableState {
  // required
  optional int64 timestamp_ms = 1;

  // required
  optional bool writable = 2;
}

message RouteChange {
  // required
  optional int64 timestamp_ms = 1;
  // required - True if the route is ready for sending packets.
  optional bool connected = 2;
  // required - The per packet data overhead for this route.
  optional uint32 overhead = 3;
}
