blob: 373eaa77ee1340319f989c3dbdce8555f40a6625 [file] [log] [blame]
zsteind48dbda2017-04-04 19:45:57 -07001/*
2 * Copyright 2017 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
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#ifndef PC_RTPTRANSPORT_H_
12#define PC_RTPTRANSPORT_H_
zsteind48dbda2017-04-04 19:45:57 -070013
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020014#include "pc/bundlefilter.h"
15#include "pc/rtptransportinternal.h"
16#include "rtc_base/sigslot.h"
zsteind9ce7642017-04-10 16:17:57 -070017
zsteind48dbda2017-04-04 19:45:57 -070018namespace rtc {
19
zstein56162b92017-04-24 16:54:35 -070020class CopyOnWriteBuffer;
21struct PacketOptions;
zstein3dcf0e92017-06-01 13:22:42 -070022struct PacketTime;
zsteind48dbda2017-04-04 19:45:57 -070023class PacketTransportInternal;
24
25} // namespace rtc
26
27namespace webrtc {
28
zstein398c3fd2017-07-19 13:38:02 -070029class RtpTransport : public RtpTransportInternal {
zsteind48dbda2017-04-04 19:45:57 -070030 public:
31 RtpTransport(const RtpTransport&) = delete;
32 RtpTransport& operator=(const RtpTransport&) = delete;
33
zstein56162b92017-04-24 16:54:35 -070034 explicit RtpTransport(bool rtcp_mux_enabled)
35 : rtcp_mux_enabled_(rtcp_mux_enabled) {}
zsteind48dbda2017-04-04 19:45:57 -070036
zstein56162b92017-04-24 16:54:35 -070037 bool rtcp_mux_enabled() const { return rtcp_mux_enabled_; }
zstein398c3fd2017-07-19 13:38:02 -070038 void SetRtcpMuxEnabled(bool enable) override;
zsteind48dbda2017-04-04 19:45:57 -070039
zstein398c3fd2017-07-19 13:38:02 -070040 rtc::PacketTransportInternal* rtp_packet_transport() const override {
zsteind48dbda2017-04-04 19:45:57 -070041 return rtp_packet_transport_;
42 }
zstein398c3fd2017-07-19 13:38:02 -070043 void SetRtpPacketTransport(rtc::PacketTransportInternal* rtp) override;
zsteind48dbda2017-04-04 19:45:57 -070044
zstein398c3fd2017-07-19 13:38:02 -070045 rtc::PacketTransportInternal* rtcp_packet_transport() const override {
zsteind48dbda2017-04-04 19:45:57 -070046 return rtcp_packet_transport_;
47 }
zstein398c3fd2017-07-19 13:38:02 -070048 void SetRtcpPacketTransport(rtc::PacketTransportInternal* rtcp) override;
zsteind48dbda2017-04-04 19:45:57 -070049
zsteind9ce7642017-04-10 16:17:57 -070050 PacketTransportInterface* GetRtpPacketTransport() const override;
51 PacketTransportInterface* GetRtcpPacketTransport() const override;
52
53 // TODO(zstein): Use these RtcpParameters for configuration elsewhere.
sprangdb2a9fc2017-08-09 06:42:32 -070054 RTCError SetParameters(const RtpTransportParameters& parameters) override;
55 RtpTransportParameters GetParameters() const override;
zsteind9ce7642017-04-10 16:17:57 -070056
zstein398c3fd2017-07-19 13:38:02 -070057 bool IsWritable(bool rtcp) const override;
zstein56162b92017-04-24 16:54:35 -070058
zhihuangeb23e172017-09-19 01:12:52 -070059 bool SendPacket(bool rtcp,
60 rtc::CopyOnWriteBuffer* packet,
61 const rtc::PacketOptions& options,
62 int flags) override;
zstein56162b92017-04-24 16:54:35 -070063
zstein398c3fd2017-07-19 13:38:02 -070064 bool HandlesPayloadType(int payload_type) const override;
zstein3dcf0e92017-06-01 13:22:42 -070065
zstein398c3fd2017-07-19 13:38:02 -070066 void AddHandledPayloadType(int payload_type) override;
zstein3dcf0e92017-06-01 13:22:42 -070067
zsteind9ce7642017-04-10 16:17:57 -070068 protected:
69 // TODO(zstein): Remove this when we remove RtpTransportAdapter.
70 RtpTransportAdapter* GetInternal() override;
71
zsteind48dbda2017-04-04 19:45:57 -070072 private:
zstein3dcf0e92017-06-01 13:22:42 -070073 bool HandlesPacket(const uint8_t* data, size_t len);
74
zstein56162b92017-04-24 16:54:35 -070075 void OnReadyToSend(rtc::PacketTransportInternal* transport);
76
77 // Updates "ready to send" for an individual channel and fires
78 // SignalReadyToSend.
79 void SetReadyToSend(bool rtcp, bool ready);
80
81 void MaybeSignalReadyToSend();
82
zstein3dcf0e92017-06-01 13:22:42 -070083 void OnReadPacket(rtc::PacketTransportInternal* transport,
84 const char* data,
85 size_t len,
86 const rtc::PacketTime& packet_time,
87 int flags);
88
89 bool WantsPacket(bool rtcp, const rtc::CopyOnWriteBuffer* packet);
90
zstein56162b92017-04-24 16:54:35 -070091 bool rtcp_mux_enabled_;
zsteind48dbda2017-04-04 19:45:57 -070092
zsteind48dbda2017-04-04 19:45:57 -070093 rtc::PacketTransportInternal* rtp_packet_transport_ = nullptr;
94 rtc::PacketTransportInternal* rtcp_packet_transport_ = nullptr;
zsteind9ce7642017-04-10 16:17:57 -070095
zstein56162b92017-04-24 16:54:35 -070096 bool ready_to_send_ = false;
97 bool rtp_ready_to_send_ = false;
98 bool rtcp_ready_to_send_ = false;
99
sprangdb2a9fc2017-08-09 06:42:32 -0700100 RtpTransportParameters parameters_;
zstein3dcf0e92017-06-01 13:22:42 -0700101
102 cricket::BundleFilter bundle_filter_;
zsteind48dbda2017-04-04 19:45:57 -0700103};
104
105} // namespace webrtc
106
Mirko Bonadei92ea95e2017-09-15 06:47:31 +0200107#endif // PC_RTPTRANSPORT_H_