blob: 5e1aa20a1f7c0c74f1a88dbec1c72f6d6503501e [file] [log] [blame]
zsteind48dbda2017-04-05 02:45:571/*
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 04:47:3111#ifndef PC_RTPTRANSPORT_H_
12#define PC_RTPTRANSPORT_H_
zsteind48dbda2017-04-05 02:45:5713
Mirko Bonadei92ea95e2017-09-15 04:47:3114#include "pc/bundlefilter.h"
15#include "pc/rtptransportinternal.h"
16#include "rtc_base/sigslot.h"
zsteind9ce7642017-04-10 23:17:5717
zsteind48dbda2017-04-05 02:45:5718namespace rtc {
19
zstein56162b92017-04-24 23:54:3520class CopyOnWriteBuffer;
21struct PacketOptions;
zstein3dcf0e92017-06-01 20:22:4222struct PacketTime;
zsteind48dbda2017-04-05 02:45:5723class PacketTransportInternal;
24
25} // namespace rtc
26
27namespace webrtc {
28
zstein398c3fd2017-07-19 20:38:0229class RtpTransport : public RtpTransportInternal {
zsteind48dbda2017-04-05 02:45:5730 public:
31 RtpTransport(const RtpTransport&) = delete;
32 RtpTransport& operator=(const RtpTransport&) = delete;
33
zstein56162b92017-04-24 23:54:3534 explicit RtpTransport(bool rtcp_mux_enabled)
35 : rtcp_mux_enabled_(rtcp_mux_enabled) {}
zsteind48dbda2017-04-05 02:45:5736
zstein56162b92017-04-24 23:54:3537 bool rtcp_mux_enabled() const { return rtcp_mux_enabled_; }
zstein398c3fd2017-07-19 20:38:0238 void SetRtcpMuxEnabled(bool enable) override;
zsteind48dbda2017-04-05 02:45:5739
zstein398c3fd2017-07-19 20:38:0240 rtc::PacketTransportInternal* rtp_packet_transport() const override {
zsteind48dbda2017-04-05 02:45:5741 return rtp_packet_transport_;
42 }
zstein398c3fd2017-07-19 20:38:0243 void SetRtpPacketTransport(rtc::PacketTransportInternal* rtp) override;
zsteind48dbda2017-04-05 02:45:5744
zstein398c3fd2017-07-19 20:38:0245 rtc::PacketTransportInternal* rtcp_packet_transport() const override {
zsteind48dbda2017-04-05 02:45:5746 return rtcp_packet_transport_;
47 }
zstein398c3fd2017-07-19 20:38:0248 void SetRtcpPacketTransport(rtc::PacketTransportInternal* rtcp) override;
zsteind48dbda2017-04-05 02:45:5749
zsteind9ce7642017-04-10 23:17:5750 PacketTransportInterface* GetRtpPacketTransport() const override;
51 PacketTransportInterface* GetRtcpPacketTransport() const override;
52
53 // TODO(zstein): Use these RtcpParameters for configuration elsewhere.
sprangdb2a9fc2017-08-09 13:42:3254 RTCError SetParameters(const RtpTransportParameters& parameters) override;
55 RtpTransportParameters GetParameters() const override;
zsteind9ce7642017-04-10 23:17:5756
zstein398c3fd2017-07-19 20:38:0257 bool IsWritable(bool rtcp) const override;
zstein56162b92017-04-24 23:54:3558
zhihuange683c682017-08-31 23:00:0759 bool SendRtpPacket(rtc::CopyOnWriteBuffer* packet,
60 const rtc::PacketOptions& options,
61 int flags) override;
62
63 bool SendRtcpPacket(rtc::CopyOnWriteBuffer* packet,
64 const rtc::PacketOptions& options,
65 int flags) override;
zstein56162b92017-04-24 23:54:3566
zstein398c3fd2017-07-19 20:38:0267 bool HandlesPayloadType(int payload_type) const override;
zstein3dcf0e92017-06-01 20:22:4268
zstein398c3fd2017-07-19 20:38:0269 void AddHandledPayloadType(int payload_type) override;
zstein3dcf0e92017-06-01 20:22:4270
zsteind9ce7642017-04-10 23:17:5771 protected:
72 // TODO(zstein): Remove this when we remove RtpTransportAdapter.
73 RtpTransportAdapter* GetInternal() override;
74
zsteind48dbda2017-04-05 02:45:5775 private:
zstein3dcf0e92017-06-01 20:22:4276 bool HandlesPacket(const uint8_t* data, size_t len);
77
zstein56162b92017-04-24 23:54:3578 void OnReadyToSend(rtc::PacketTransportInternal* transport);
79
80 // Updates "ready to send" for an individual channel and fires
81 // SignalReadyToSend.
82 void SetReadyToSend(bool rtcp, bool ready);
83
84 void MaybeSignalReadyToSend();
85
zhihuange683c682017-08-31 23:00:0786 bool SendPacket(bool rtcp,
87 rtc::CopyOnWriteBuffer* packet,
88 const rtc::PacketOptions& options,
89 int flags);
90
zstein3dcf0e92017-06-01 20:22:4291 void OnReadPacket(rtc::PacketTransportInternal* transport,
92 const char* data,
93 size_t len,
94 const rtc::PacketTime& packet_time,
95 int flags);
96
97 bool WantsPacket(bool rtcp, const rtc::CopyOnWriteBuffer* packet);
98
zstein56162b92017-04-24 23:54:3599 bool rtcp_mux_enabled_;
zsteind48dbda2017-04-05 02:45:57100
zsteind48dbda2017-04-05 02:45:57101 rtc::PacketTransportInternal* rtp_packet_transport_ = nullptr;
102 rtc::PacketTransportInternal* rtcp_packet_transport_ = nullptr;
zsteind9ce7642017-04-10 23:17:57103
zstein56162b92017-04-24 23:54:35104 bool ready_to_send_ = false;
105 bool rtp_ready_to_send_ = false;
106 bool rtcp_ready_to_send_ = false;
107
sprangdb2a9fc2017-08-09 13:42:32108 RtpTransportParameters parameters_;
zstein3dcf0e92017-06-01 20:22:42109
110 cricket::BundleFilter bundle_filter_;
zsteind48dbda2017-04-05 02:45:57111};
112
113} // namespace webrtc
114
Mirko Bonadei92ea95e2017-09-15 04:47:31115#endif // PC_RTPTRANSPORT_H_