summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/net/dcsctp/rx/reassembly_queue.cc
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/libwebrtc/net/dcsctp/rx/reassembly_queue.cc')
-rw-r--r--third_party/libwebrtc/net/dcsctp/rx/reassembly_queue.cc51
1 files changed, 4 insertions, 47 deletions
diff --git a/third_party/libwebrtc/net/dcsctp/rx/reassembly_queue.cc b/third_party/libwebrtc/net/dcsctp/rx/reassembly_queue.cc
index 573443635c..4c223d0532 100644
--- a/third_party/libwebrtc/net/dcsctp/rx/reassembly_queue.cc
+++ b/third_party/libwebrtc/net/dcsctp/rx/reassembly_queue.cc
@@ -23,7 +23,6 @@
#include "absl/types/optional.h"
#include "api/array_view.h"
#include "net/dcsctp/common/sequence_numbers.h"
-#include "net/dcsctp/common/str_join.h"
#include "net/dcsctp/packet/chunk/forward_tsn_common.h"
#include "net/dcsctp/packet/data.h"
#include "net/dcsctp/packet/parameter/outgoing_ssn_reset_request_parameter.h"
@@ -34,6 +33,7 @@
#include "net/dcsctp/rx/reassembly_streams.h"
#include "net/dcsctp/rx/traditional_reassembly_streams.h"
#include "rtc_base/logging.h"
+#include "rtc_base/strings/str_join.h"
namespace dcsctp {
namespace {
@@ -57,8 +57,6 @@ ReassemblyQueue::ReassemblyQueue(absl::string_view log_prefix,
: log_prefix_(log_prefix),
max_size_bytes_(max_size_bytes),
watermark_bytes_(max_size_bytes * kHighWatermarkLimit),
- last_assembled_tsn_watermark_(
- tsn_unwrapper_.Unwrap(TSN(*peer_initial_tsn - 1))),
last_completed_reset_req_seq_nbr_(ReconfigRequestSN(0)),
streams_(CreateStreams(
log_prefix_,
@@ -180,33 +178,9 @@ void ReassemblyQueue::AddReassembledMessage(
<< ", ppid=" << *message.ppid()
<< ", payload=" << message.payload().size() << " bytes";
- for (const UnwrappedTSN tsn : tsns) {
- if (tsn == last_assembled_tsn_watermark_.next_value()) {
- // Update watermark, or insert into delivered_tsns_
- last_assembled_tsn_watermark_.Increment();
- } else {
- delivered_tsns_.insert(tsn);
- }
- }
-
- // With new TSNs in delivered_tsns, gaps might be filled.
- MaybeMoveLastAssembledWatermarkFurther();
-
reassembled_messages_.emplace_back(std::move(message));
}
-void ReassemblyQueue::MaybeMoveLastAssembledWatermarkFurther() {
- // `delivered_tsns_` contain TSNS when there is a gap between ranges of
- // assembled TSNs. `last_assembled_tsn_watermark_` should not be adjacent to
- // that list, because if so, it can be moved.
- while (!delivered_tsns_.empty() &&
- *delivered_tsns_.begin() ==
- last_assembled_tsn_watermark_.next_value()) {
- last_assembled_tsn_watermark_.Increment();
- delivered_tsns_.erase(delivered_tsns_.begin());
- }
-}
-
void ReassemblyQueue::HandleForwardTsn(
TSN new_cumulative_tsn,
rtc::ArrayView<const AnyForwardTsnChunk::SkippedStream> skipped_streams) {
@@ -228,33 +202,19 @@ void ReassemblyQueue::HandleForwardTsn(
RTC_DLOG(LS_VERBOSE) << log_prefix_ << "ForwardTSN to " << *tsn.Wrap()
<< " - performing.";
- last_assembled_tsn_watermark_ = std::max(last_assembled_tsn_watermark_, tsn);
- delivered_tsns_.erase(delivered_tsns_.begin(),
- delivered_tsns_.upper_bound(tsn));
- MaybeMoveLastAssembledWatermarkFurther();
queued_bytes_ -= streams_->HandleForwardTsn(tsn, skipped_streams);
RTC_DCHECK(IsConsistent());
}
bool ReassemblyQueue::IsConsistent() const {
- // `delivered_tsns_` and `last_assembled_tsn_watermark_` mustn't overlap or be
- // adjacent.
- if (!delivered_tsns_.empty() &&
- last_assembled_tsn_watermark_.next_value() >= *delivered_tsns_.begin()) {
- return false;
- }
-
// Allow queued_bytes_ to be larger than max_size_bytes, as it's not actively
- // enforced in this class. This comparison will still trigger if queued_bytes_
- // became "negative".
- return (queued_bytes_ >= 0 && queued_bytes_ <= 2 * max_size_bytes_);
+ // enforced in this class. But in case it wraps around (becomes negative, but
+ // as it's unsigned, that would wrap to very big), this would trigger.
+ return (queued_bytes_ <= 2 * max_size_bytes_);
}
HandoverReadinessStatus ReassemblyQueue::GetHandoverReadiness() const {
HandoverReadinessStatus status = streams_->GetHandoverReadiness();
- if (!delivered_tsns_.empty()) {
- status.Add(HandoverUnreadinessReason::kReassemblyQueueDeliveredTSNsGap);
- }
if (deferred_reset_streams_.has_value()) {
status.Add(HandoverUnreadinessReason::kStreamResetDeferred);
}
@@ -262,7 +222,6 @@ HandoverReadinessStatus ReassemblyQueue::GetHandoverReadiness() const {
}
void ReassemblyQueue::AddHandoverState(DcSctpSocketHandoverState& state) {
- state.rx.last_assembled_tsn = last_assembled_tsn_watermark_.Wrap().value();
state.rx.last_completed_deferred_reset_req_sn =
last_completed_reset_req_seq_nbr_.value();
streams_->AddHandoverState(state);
@@ -272,8 +231,6 @@ void ReassemblyQueue::RestoreFromState(const DcSctpSocketHandoverState& state) {
// Validate that the component is in pristine state.
RTC_DCHECK(last_completed_reset_req_seq_nbr_ == ReconfigRequestSN(0));
- last_assembled_tsn_watermark_ =
- tsn_unwrapper_.Unwrap(TSN(state.rx.last_assembled_tsn));
last_completed_reset_req_seq_nbr_ =
ReconfigRequestSN(state.rx.last_completed_deferred_reset_req_sn);
streams_->RestoreFromState(state);