67 lines
2.0 KiB
C
67 lines
2.0 KiB
C
|
|
/*
|
||
|
|
* 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 <stdint.h>
|
||
|
|
|
||
|
|
#include <utility>
|
||
|
|
#include <vector>
|
||
|
|
|
||
|
|
#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<SkippedStream> 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<const SkippedStream> skipped_streams() const {
|
||
|
|
return skipped_streams_;
|
||
|
|
}
|
||
|
|
|
||
|
|
private:
|
||
|
|
TSN new_cumulative_tsn_;
|
||
|
|
std::vector<SkippedStream> skipped_streams_;
|
||
|
|
};
|
||
|
|
} // namespace dcsctp
|
||
|
|
|
||
|
|
#endif // NET_DCSCTP_PACKET_CHUNK_FORWARD_TSN_COMMON_H_
|