#include "net/dcsctp/rx/data_tracker.h"
#include <algorithm>
#include <cstdint>
#include <iterator>
#include <set>
#include <string>
#include <utility>
#include <vector>
#include "absl/algorithm/container.h"
#include "absl/strings/string_view.h"
#include "absl/types/optional.h"
#include "net/dcsctp/common/sequence_numbers.h"
#include "net/dcsctp/packet/chunk/sack_chunk.h"
#include "net/dcsctp/timer/timer.h"
#include "rtc_base/logging.h"
#include "rtc_base/strings/string_builder.h"
namespace dcsctp {
constexpr size_t DataTracker::kMaxDuplicateTsnReported;
constexpr size_t DataTracker::kMaxGapAckBlocksReported;
bool DataTracker::AdditionalTsnBlocks::Add(UnwrappedTSN tsn) { … }
void DataTracker::AdditionalTsnBlocks::EraseTo(UnwrappedTSN tsn) { … }
void DataTracker::AdditionalTsnBlocks::PopFront() { … }
bool DataTracker::IsTSNValid(TSN tsn) const { … }
bool DataTracker::Observe(TSN tsn,
AnyDataChunk::ImmediateAckFlag immediate_ack) { … }
bool DataTracker::HandleForwardTsn(TSN new_cumulative_ack) { … }
SackChunk DataTracker::CreateSelectiveAck(size_t a_rwnd) { … }
std::vector<SackChunk::GapAckBlock> DataTracker::CreateGapAckBlocks() const { … }
bool DataTracker::ShouldSendAck(bool also_if_delayed) { … }
bool DataTracker::will_increase_cum_ack_tsn(TSN tsn) const { … }
void DataTracker::ForceImmediateSack() { … }
void DataTracker::HandleDelayedAckTimerExpiry() { … }
void DataTracker::ObservePacketEnd() { … }
void DataTracker::UpdateAckState(AckState new_state, absl::string_view reason) { … }
absl::string_view DataTracker::ToString(AckState ack_state) { … }
HandoverReadinessStatus DataTracker::GetHandoverReadiness() const { … }
void DataTracker::AddHandoverState(DcSctpSocketHandoverState& state) { … }
void DataTracker::RestoreFromState(const DcSctpSocketHandoverState& state) { … }
}