From e50658de850dc7f124bf90f77633d2c6c78e2d0c Mon Sep 17 00:00:00 2001 From: zhihuang Date: Tue, 3 Jan 2017 11:34:12 -0800 Subject: [PATCH] Create the DtlsTransportInternal DtlsTransportInternal is an internal interface that does DTLS. The DtlsTransportChannel will inherit from this class instead of the TransportChannelImpl so that the ICE-related methods can be separated. Once the DtlsTransportChannl inherits from this class. It would be renamed as DtlsTransport. BUG=none Review-Url: https://codereview.webrtc.org/2597053002 Cr-Commit-Position: refs/heads/master@{#15888} --- webrtc/p2p/BUILD.gn | 1 + webrtc/p2p/base/dtlstransportinternal.h | 103 ++++++++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 webrtc/p2p/base/dtlstransportinternal.h diff --git a/webrtc/p2p/BUILD.gn b/webrtc/p2p/BUILD.gn index fd883e162f..c2dc28220f 100644 --- a/webrtc/p2p/BUILD.gn +++ b/webrtc/p2p/BUILD.gn @@ -29,6 +29,7 @@ rtc_static_library("rtc_p2p") { "base/common.h", "base/dtlstransportchannel.cc", "base/dtlstransportchannel.h", + "base/dtlstransportinternal.h", "base/icetransportinternal.h", "base/jseptransport.cc", "base/jseptransport.h", diff --git a/webrtc/p2p/base/dtlstransportinternal.h b/webrtc/p2p/base/dtlstransportinternal.h new file mode 100644 index 0000000000..780c128e00 --- /dev/null +++ b/webrtc/p2p/base/dtlstransportinternal.h @@ -0,0 +1,103 @@ +/* + * Copyright 2016 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 WEBRTC_P2P_BASE_DTLSTRANSPORTINTERNAL_H_ +#define WEBRTC_P2P_BASE_DTLSTRANSPORTINTERNAL_H_ + +#include +#include +#include + +#include "webrtc/base/sslstreamadapter.h" +#include "webrtc/p2p/base/icetransportinternal.h" +#include "webrtc/p2p/base/jseptransport.h" +#include "webrtc/p2p/base/packettransportinterface.h" + +namespace cricket { + +// DtlsTransportInternal is an internal interface that does DTLS. +// Once the public interface is supported, +// (https://www.w3.org/TR/webrtc/#rtcdtlstransport-interface) +// the DtlsTransportInterface will be split from this class. +class DtlsTransportInternal : public rtc::PacketTransportInterface { + public: + virtual ~DtlsTransportInternal() {} + + virtual DtlsTransportState dtls_state() const = 0; + + virtual const std::string& transport_name() const = 0; + + virtual int component() const = 0; + + virtual bool IsDtlsActive() const = 0; + + virtual bool GetSslRole(rtc::SSLRole* role) const = 0; + + virtual bool SetSslRole(rtc::SSLRole role) = 0; + + // Sets up the ciphers to use for DTLS-SRTP. + virtual bool SetSrtpCryptoSuites(const std::vector& ciphers) = 0; + + // Keep the original one for backward compatibility until all dependencies + // move away. TODO(zhihuang): Remove this function. + virtual bool SetSrtpCiphers(const std::vector& ciphers) = 0; + + // Finds out which DTLS-SRTP cipher was negotiated. + // TODO(zhihuang): Remove this once all dependencies implement this. + virtual bool GetSrtpCryptoSuite(int* cipher) = 0; + + // Finds out which DTLS cipher was negotiated. + // TODO(zhihuang): Remove this once all dependencies implement this. + virtual bool GetSslCipherSuite(int* cipher) = 0; + + // Gets the local RTCCertificate used for DTLS. + virtual rtc::scoped_refptr GetLocalCertificate() + const = 0; + + virtual bool SetLocalCertificate( + const rtc::scoped_refptr& certificate) = 0; + + // Gets a copy of the remote side's SSL certificate. + virtual std::unique_ptr GetRemoteSSLCertificate() + const = 0; + + // Allows key material to be extracted for external encryption. + virtual bool ExportKeyingMaterial(const std::string& label, + const uint8_t* context, + size_t context_len, + bool use_context, + uint8_t* result, + size_t result_len) = 0; + + // Set DTLS remote fingerprint. Must be after local identity set. + virtual bool SetRemoteFingerprint(const std::string& digest_alg, + const uint8_t* digest, + size_t digest_len) = 0; + + // Expose the underneath IceTransport. + virtual IceTransportInternal* ice_transport() = 0; + + sigslot::signal2 SignalDtlsState; + + // Emitted whenever the Dtls handshake failed on some transport channel. + sigslot::signal1 SignalDtlsHandshakeError; + + // Debugging description of this transport. + std::string debug_name() const override { + return transport_name() + " " + std::to_string(component()); + } + + private: + RTC_DISALLOW_COPY_AND_ASSIGN(DtlsTransportInternal); +}; + +} // namespace cricket + +#endif // WEBRTC_P2P_BASE_DTLSTRANSPORTINTERNAL_H_