/* * 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 NET_DCSCTP_PACKET_CHUNK_FORWARD_TSN_COMMON_H_ #define NET_DCSCTP_PACKET_CHUNK_FORWARD_TSN_COMMON_H_ #include #include #include #include "api/array_view.h" #include "net/dcsctp/packet/chunk/chunk.h" namespace dcsctp { // Base class for both ForwardTsnChunk and IForwardTsnChunk class AnyForwardTsnChunk : public Chunk { public: struct SkippedStream { SkippedStream(StreamID stream_id, SSN ssn) : stream_id(stream_id), ssn(ssn), unordered(false), message_id(0) {} SkippedStream(IsUnordered unordered, StreamID stream_id, MID message_id) : stream_id(stream_id), ssn(0), unordered(unordered), message_id(message_id) {} StreamID stream_id; // Set for FORWARD_TSN SSN ssn; // Set for I-FORWARD_TSN IsUnordered unordered; MID message_id; bool operator==(const SkippedStream& other) const { return stream_id == other.stream_id && ssn == other.ssn && unordered == other.unordered && message_id == other.message_id; } }; AnyForwardTsnChunk(TSN new_cumulative_tsn, std::vector skipped_streams) : new_cumulative_tsn_(new_cumulative_tsn), skipped_streams_(std::move(skipped_streams)) {} TSN new_cumulative_tsn() const { return new_cumulative_tsn_; } rtc::ArrayView skipped_streams() const { return skipped_streams_; } private: TSN new_cumulative_tsn_; std::vector skipped_streams_; }; } // namespace dcsctp #endif // NET_DCSCTP_PACKET_CHUNK_FORWARD_TSN_COMMON_H_