1 /* 2 * Copyright (c) 2021 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 #ifndef NET_DCSCTP_PACKET_CHUNK_INIT_ACK_CHUNK_H_ 11 #define NET_DCSCTP_PACKET_CHUNK_INIT_ACK_CHUNK_H_ 12 #include <stddef.h> 13 #include <stdint.h> 14 15 #include <string> 16 #include <utility> 17 #include <vector> 18 19 #include "absl/strings/string_view.h" 20 #include "api/array_view.h" 21 #include "net/dcsctp/packet/chunk/chunk.h" 22 #include "net/dcsctp/packet/parameter/parameter.h" 23 #include "net/dcsctp/packet/tlv_trait.h" 24 25 namespace dcsctp { 26 27 // https://tools.ietf.org/html/rfc4960#section-3.3.3 28 struct InitAckChunkConfig : ChunkConfig { 29 static constexpr int kType = 2; 30 static constexpr size_t kHeaderSize = 20; 31 static constexpr size_t kVariableLengthAlignment = 1; 32 }; 33 34 class InitAckChunk : public Chunk, public TLVTrait<InitAckChunkConfig> { 35 public: 36 static constexpr int kType = InitAckChunkConfig::kType; 37 InitAckChunk(VerificationTag initiate_tag,uint32_t a_rwnd,uint16_t nbr_outbound_streams,uint16_t nbr_inbound_streams,TSN initial_tsn,Parameters parameters)38 InitAckChunk(VerificationTag initiate_tag, 39 uint32_t a_rwnd, 40 uint16_t nbr_outbound_streams, 41 uint16_t nbr_inbound_streams, 42 TSN initial_tsn, 43 Parameters parameters) 44 : initiate_tag_(initiate_tag), 45 a_rwnd_(a_rwnd), 46 nbr_outbound_streams_(nbr_outbound_streams), 47 nbr_inbound_streams_(nbr_inbound_streams), 48 initial_tsn_(initial_tsn), 49 parameters_(std::move(parameters)) {} 50 51 InitAckChunk(InitAckChunk&& other) = default; 52 InitAckChunk& operator=(InitAckChunk&& other) = default; 53 54 static absl::optional<InitAckChunk> Parse(rtc::ArrayView<const uint8_t> data); 55 56 void SerializeTo(std::vector<uint8_t>& out) const override; 57 std::string ToString() const override; 58 initiate_tag()59 VerificationTag initiate_tag() const { return initiate_tag_; } a_rwnd()60 uint32_t a_rwnd() const { return a_rwnd_; } nbr_outbound_streams()61 uint16_t nbr_outbound_streams() const { return nbr_outbound_streams_; } nbr_inbound_streams()62 uint16_t nbr_inbound_streams() const { return nbr_inbound_streams_; } initial_tsn()63 TSN initial_tsn() const { return initial_tsn_; } parameters()64 const Parameters& parameters() const { return parameters_; } 65 66 private: 67 VerificationTag initiate_tag_; 68 uint32_t a_rwnd_; 69 uint16_t nbr_outbound_streams_; 70 uint16_t nbr_inbound_streams_; 71 TSN initial_tsn_; 72 Parameters parameters_; 73 }; 74 75 } // namespace dcsctp 76 77 #endif // NET_DCSCTP_PACKET_CHUNK_INIT_ACK_CHUNK_H_ 78