/* * Copyright 2018 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.
*/
bool rtcp_mux_enabled = true;
std::vector<int> encrypted_header_extension_ids; int rtp_abs_sendtime_extn_id = -1; // TODO(zhihuang): Add the ICE and DTLS related variables and methods from // TransportDescription and remove this extra layer of abstraction.
TransportDescription transport_desc;
};
// Helper class used by JsepTransportController that processes // TransportDescriptions. A TransportDescription represents the // transport-specific properties of an SDP m= section, processed according to // JSEP. Each transport consists of DTLS and ICE transport channels for RTP // (and possibly RTCP, if rtcp-mux isn't used). // // On Threading: JsepTransport performs work solely on the network thread, and // so its methods should only be called on the network thread. class JsepTransport { public: // `mid` is just used for log statements in order to identify the Transport. // Note that `local_certificate` is allowed to be null since a remote // description may be set before a local certificate is generated.
JsepTransport( const std::string& mid, const rtc::scoped_refptr<rtc::RTCCertificate>& local_certificate,
rtc::scoped_refptr<webrtc::IceTransportInterface> ice_transport,
rtc::scoped_refptr<webrtc::IceTransportInterface> rtcp_ice_transport,
std::unique_ptr<webrtc::RtpTransport> unencrypted_rtp_transport,
std::unique_ptr<webrtc::SrtpTransport> sdes_transport,
std::unique_ptr<webrtc::DtlsSrtpTransport> dtls_srtp_transport,
std::unique_ptr<DtlsTransportInternal> rtp_dtls_transport,
std::unique_ptr<DtlsTransportInternal> rtcp_dtls_transport,
std::unique_ptr<SctpTransportInternal> sctp_transport,
std::function<void()> rtcp_mux_active_callback,
webrtc::PayloadTypePicker& suggester);
// Returns the MID of this transport. This is only used for logging. const std::string& mid() const { return mid_; }
// Must be called before applying local session description. // Needed in order to verify the local fingerprint. void SetLocalCertificate( const rtc::scoped_refptr<rtc::RTCCertificate>& local_certificate) {
RTC_DCHECK_RUN_ON(network_thread_);
local_certificate_ = local_certificate;
}
// Return the local certificate provided by SetLocalCertificate.
rtc::scoped_refptr<rtc::RTCCertificate> GetLocalCertificate() const {
RTC_DCHECK_RUN_ON(network_thread_); return local_certificate_;
}
// Set the remote TransportDescription to be used by DTLS and ICE channels // that are part of this Transport.
webrtc::RTCError SetRemoteJsepTransportDescription( const JsepTransportDescription& jsep_description,
webrtc::SdpType type);
webrtc::RTCError AddRemoteCandidates(const Candidates& candidates);
// Set the "needs-ice-restart" flag as described in JSEP. After the flag is // set, offers should generate new ufrags/passwords until an ICE restart // occurs. // // This and `needs_ice_restart()` must be called on the network thread. void SetNeedsIceRestartFlag();
// Returns true if the ICE restart flag above was set, and no ICE restart has // occurred yet for this transport (by applying a local description with // changed ufrag/password). bool needs_ice_restart() const {
RTC_DCHECK_RUN_ON(network_thread_); return needs_ice_restart_;
}
// Returns role if negotiated, or empty std::optional if it hasn't been // negotiated yet.
std::optional<rtc::SSLRole> GetDtlsRole() const;
// TODO(bugs.webrtc.org/9719): Delete method, update callers to use // SctpTransport() instead.
webrtc::DataChannelTransportInterface* data_channel_transport() const { return sctp_transport_.get();
}
// TODO(deadbeef): The methods below are only public for testing. Should make // them utility functions or objects so they can be tested independently from // this class.
// Returns an error if the certificate's identity does not match the // fingerprint, or either is NULL.
webrtc::RTCError VerifyCertificateFingerprint( const rtc::RTCCertificate* certificate, const rtc::SSLFingerprint* fingerprint) const;
// Record the PT mappings from a single media section. // This is used to store info needed when generating subsequent SDP.
webrtc::RTCError RecordPayloadTypes(bool local,
webrtc::SdpType type, const ContentInfo& content);
// Negotiates and sets the DTLS parameters based on the current local and // remote transport description, such as the DTLS role to use, and whether // DTLS should be activated. // // Called when an answer TransportDescription is applied.
webrtc::RTCError NegotiateAndSetDtlsParameters(
webrtc::SdpType local_description_type);
// Negotiates the DTLS role based off the offer and answer as specified by // RFC 4145, section-4.1. Returns an RTCError if role cannot be determined // from the local description and remote description.
webrtc::RTCError NegotiateDtlsRole(
webrtc::SdpType local_description_type,
ConnectionRole local_connection_role,
ConnectionRole remote_connection_role,
std::optional<rtc::SSLRole>* negotiated_dtls_role);
// Pushes down the ICE parameters from the remote description. void SetRemoteIceParameters(const IceParameters& ice_parameters,
IceTransportInternal* ice);
// Pushes down the DTLS parameters obtained via negotiation. static webrtc::RTCError SetNegotiatedDtlsParameters(
DtlsTransportInternal* dtls_transport,
std::optional<rtc::SSLRole> dtls_role,
rtc::SSLFingerprint* remote_fingerprint);
bool GetTransportStats(DtlsTransportInternal* dtls_transport, int component,
TransportStats* stats) const;
// Owning thread, for safety checks const rtc::Thread* const network_thread_; const std::string mid_; // needs-ice-restart bit as described in JSEP. bool needs_ice_restart_ RTC_GUARDED_BY(network_thread_) = false;
rtc::scoped_refptr<rtc::RTCCertificate> local_certificate_
RTC_GUARDED_BY(network_thread_);
std::unique_ptr<JsepTransportDescription> local_description_
RTC_GUARDED_BY(network_thread_);
std::unique_ptr<JsepTransportDescription> remote_description_
RTC_GUARDED_BY(network_thread_);
// Ice transport which may be used by any of upper-layer transports (below). // Owned by JsepTransport and guaranteed to outlive the transports below. const rtc::scoped_refptr<webrtc::IceTransportInterface> ice_transport_; const rtc::scoped_refptr<webrtc::IceTransportInterface> rtcp_ice_transport_;
// To avoid downcasting and make it type safe, keep three unique pointers for // different SRTP mode and only one of these is non-nullptr. const std::unique_ptr<webrtc::RtpTransport> unencrypted_rtp_transport_; const std::unique_ptr<webrtc::SrtpTransport> sdes_transport_; const std::unique_ptr<webrtc::DtlsSrtpTransport> dtls_srtp_transport_;
const rtc::scoped_refptr<webrtc::DtlsTransport> rtp_dtls_transport_; // The RTCP transport is const for all usages, except that it is cleared // when RTCP multiplexing is turned on; this happens on the network thread.
rtc::scoped_refptr<webrtc::DtlsTransport> rtcp_dtls_transport_
RTC_GUARDED_BY(network_thread_);
// Cache the encrypted header extension IDs for SDES negoitation.
std::optional<std::vector<int>> send_extension_ids_
RTC_GUARDED_BY(network_thread_);
std::optional<std::vector<int>> recv_extension_ids_
RTC_GUARDED_BY(network_thread_);
// This is invoked when RTCP-mux becomes active and // `rtcp_dtls_transport_` is destroyed. The JsepTransportController will // receive the callback and update the aggregate transport states.
std::function<void()> rtcp_mux_active_callback_;
// Assigned PTs from the remote description, used when sending.
webrtc::PayloadTypeRecorder remote_payload_types_
RTC_GUARDED_BY(network_thread_); // Assigned PTs from the local description, used when receiving.
webrtc::PayloadTypeRecorder local_payload_types_
RTC_GUARDED_BY(network_thread_);
};
} // namespace cricket
#endif// PC_JSEP_TRANSPORT_H_
Messung V0.5
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.