/* * Copyright (c) 2026 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 PC_DTLS_PACKET_PROCESSOR_H_ #define PC_DTLS_PACKET_PROCESSOR_H_ #include #include #include #include "api/units/timestamp.h" #include "pc/packet_processor.h" #include "rtc_base/copy_on_write_buffer.h" namespace webrtc { // Implements the wire format of the DTLS-only RtcTransport mode // (WireProtocol::kDtlsWithFeedback). // // Every DTLS payload begins with a 1-byte packet type: // 0x01 Data only : [type][seq(2)][app payload] // Reserved values (0x00, 0x02-0xFF) are dropped with a warning; they are set // aside for the congestion-control feedback wire format, which is not yet // defined (its format is still under discussion) and will be added in a // follow-up. // // The transport sequence number is carried now so that future feedback can // report on packets sent by this stub without a wire-format change. // // The sender wraps each application payload in a transport header via // ProcessOutgoingPacket(); the receiver strips it via ProcessIncomingPacket(), // which returns the application payload (sharing storage with the input, no // copy). All methods run on the network thread. class DtlsPacketProcessor : public PacketProcessor { public: DtlsPacketProcessor() = default; ~DtlsPacketProcessor() override = default; DtlsPacketProcessor(const DtlsPacketProcessor&) = delete; DtlsPacketProcessor& operator=(const DtlsPacketProcessor&) = delete; // PacketProcessor implementation. CopyOnWriteBuffer ProcessOutgoingPacket(std::span payload, Timestamp send_time) override; std::optional ProcessIncomingPacket( CopyOnWriteBuffer packet, Timestamp receive_time) override; // Wire format packet types. Feedback types are reserved but not yet defined. static constexpr uint8_t kPacketTypeData = 0x01; private: uint16_t next_transport_seq_ = 0; }; } // namespace webrtc #endif // PC_DTLS_PACKET_PROCESSOR_H_