Index: webrtc/ortc/rtptransportadapter.h |
diff --git a/webrtc/ortc/rtptransportadapter.h b/webrtc/ortc/rtptransportadapter.h |
index 169ae613db3385e46a8df36dfc8c2c8906fae137..59a123efae8686089729a07bda2afddc2f6dc5f9 100644 |
--- a/webrtc/ortc/rtptransportadapter.h |
+++ b/webrtc/ortc/rtptransportadapter.h |
@@ -14,7 +14,7 @@ |
#include <memory> |
#include <vector> |
-#include "webrtc/api/ortc/rtptransportinterface.h" |
+#include "webrtc/api/ortc/srtptransportinterface.h" |
#include "webrtc/api/rtcerror.h" |
#include "webrtc/base/constructormagic.h" |
#include "webrtc/base/sigslot.h" |
@@ -24,13 +24,14 @@ |
namespace webrtc { |
-// Implementation of RtpTransportInterface to be used with RtpSenderAdapter, |
-// RtpReceiverAdapter, and RtpTransportControllerAdapter classes. |
+// Implementation of SrtpTransportInterface to be used with RtpSenderAdapter, |
+// RtpReceiverAdapter, and RtpTransportControllerAdapter classes. This class |
+// is used to implement both a secure and insecure RTP transport. |
// |
// TODO(deadbeef): When BaseChannel is split apart into separate |
// "RtpTransport"/"RtpTransceiver"/"RtpSender"/"RtpReceiver" objects, this |
// adapter object can be removed. |
-class RtpTransportAdapter : public RtpTransportInterface { |
+class RtpTransportAdapter : public SrtpTransportInterface { |
public: |
// |rtp| can't be null. |rtcp| can if RTCP muxing is used immediately (meaning |
// |rtcp_parameters.mux| is also true). |
@@ -39,6 +40,13 @@ class RtpTransportAdapter : public RtpTransportInterface { |
PacketTransportInterface* rtp, |
PacketTransportInterface* rtcp, |
RtpTransportControllerAdapter* rtp_transport_controller); |
+ |
+ static RTCErrorOr<std::unique_ptr<SrtpTransportInterface>> CreateSrtpProxied( |
+ const RtcpParameters& rtcp_parameters, |
+ PacketTransportInterface* rtp, |
+ PacketTransportInterface* rtcp, |
+ RtpTransportControllerAdapter* rtp_transport_controller); |
+ |
~RtpTransportAdapter() override; |
// RtpTransportInterface implementation. |
@@ -47,6 +55,10 @@ class RtpTransportAdapter : public RtpTransportInterface { |
RTCError SetRtcpParameters(const RtcpParameters& parameters) override; |
RtcpParameters GetRtcpParameters() const override { return rtcp_parameters_; } |
+ // SRTP specific implementation. |
+ RTCError SetSrtpSendKey(const cricket::CryptoParams& params) override; |
+ RTCError SetSrtpReceiveKey(const cricket::CryptoParams& params) override; |
+ |
// Methods used internally by OrtcFactory. |
RtpTransportControllerAdapter* rtp_transport_controller() { |
return rtp_transport_controller_; |
@@ -58,6 +70,14 @@ class RtpTransportAdapter : public RtpTransportInterface { |
// returning this transport from GetTransports(). |
sigslot::signal1<RtpTransportAdapter*> SignalDestroyed; |
+ // Used by the RtpTransportControllerAdapter to tell if an rtp sender or |
+ // receiver can be created. |
+ bool is_srtp_transport() { return is_srtp_transport_; } |
+ // Used by the RtpTransportControllerAdapter to set keys for senders and |
+ // receivers. |
+ rtc::Optional<cricket::CryptoParams> send_key() { return send_key_; } |
+ rtc::Optional<cricket::CryptoParams> receive_key() { return receive_key_; } |
+ |
protected: |
RtpTransportAdapter* GetInternal() override { return this; } |
@@ -65,7 +85,8 @@ class RtpTransportAdapter : public RtpTransportInterface { |
RtpTransportAdapter(const RtcpParameters& rtcp_parameters, |
PacketTransportInterface* rtp, |
PacketTransportInterface* rtcp, |
- RtpTransportControllerAdapter* rtp_transport_controller); |
+ RtpTransportControllerAdapter* rtp_transport_controller, |
+ bool is_srtp_transport); |
PacketTransportInterface* rtp_packet_transport_; |
PacketTransportInterface* rtcp_packet_transport_; |
@@ -75,6 +96,11 @@ class RtpTransportAdapter : public RtpTransportInterface { |
owned_rtp_transport_controller_; |
RtcpParameters rtcp_parameters_; |
+ // SRTP specific members. |
+ rtc::Optional<cricket::CryptoParams> send_key_; |
+ rtc::Optional<cricket::CryptoParams> receive_key_; |
+ bool is_srtp_transport_; |
+ |
RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(RtpTransportAdapter); |
}; |