Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(459)

Unified Diff: webrtc/p2p/base/jseptransport.h

Issue 2553043004: Revert of Refactoring that removes P2PTransport and DtlsTransport classes. (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/p2p/base/faketransportcontroller.h ('k') | webrtc/p2p/base/jseptransport.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/p2p/base/jseptransport.h
diff --git a/webrtc/p2p/base/jseptransport.h b/webrtc/p2p/base/jseptransport.h
deleted file mode 100644
index 537ddea01ac39e4308c549e760b7d8d94cc3c719..0000000000000000000000000000000000000000
--- a/webrtc/p2p/base/jseptransport.h
+++ /dev/null
@@ -1,377 +0,0 @@
-/*
- * Copyright 2004 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.
- */
-
-// A Transport manages a set of named channels of the same type.
-//
-// Subclasses choose the appropriate class to instantiate for each channel;
-// however, this base class keeps track of the channels by name, watches their
-// state changes (in order to update the manager's state), and forwards
-// requests to begin connecting or to reset to each of the channels.
-//
-// On Threading: Transport performs work solely on the network thread, and so
-// its methods should only be called on the network thread.
-//
-// Note: Subclasses must call DestroyChannels() in their own destructors.
-// It is not possible to do so here because the subclass destructor will
-// already have run.
-
-#ifndef WEBRTC_P2P_BASE_JSEPTRANSPORT_H_
-#define WEBRTC_P2P_BASE_JSEPTRANSPORT_H_
-
-#include <map>
-#include <memory>
-#include <string>
-#include <vector>
-
-#include "webrtc/base/constructormagic.h"
-#include "webrtc/base/optional.h"
-#include "webrtc/p2p/base/candidate.h"
-#include "webrtc/p2p/base/p2pconstants.h"
-#include "webrtc/p2p/base/sessiondescription.h"
-#include "webrtc/p2p/base/transportinfo.h"
-#include "webrtc/base/messagequeue.h"
-#include "webrtc/base/rtccertificate.h"
-#include "webrtc/base/sigslot.h"
-#include "webrtc/base/sslstreamadapter.h"
-
-namespace cricket {
-
-class TransportChannelImpl;
-class TransportChannelImpl;
-
-typedef std::vector<Candidate> Candidates;
-
-// TODO(deadbeef): Move all of these enums, POD types and utility methods to
-// another header file.
-
-// TODO(deadbeef): Unify with PeerConnectionInterface::IceConnectionState
-// once /talk/ and /webrtc/ are combined, and also switch to ENUM_NAME naming
-// style.
-enum IceConnectionState {
- kIceConnectionConnecting = 0,
- kIceConnectionFailed,
- kIceConnectionConnected, // Writable, but still checking one or more
- // connections
- kIceConnectionCompleted,
-};
-
-enum DtlsTransportState {
- // Haven't started negotiating.
- DTLS_TRANSPORT_NEW = 0,
- // Have started negotiating.
- DTLS_TRANSPORT_CONNECTING,
- // Negotiated, and has a secure connection.
- DTLS_TRANSPORT_CONNECTED,
- // Transport is closed.
- DTLS_TRANSPORT_CLOSED,
- // Failed due to some error in the handshake process.
- DTLS_TRANSPORT_FAILED,
-};
-
-// TODO(deadbeef): Unify with PeerConnectionInterface::IceConnectionState
-// once /talk/ and /webrtc/ are combined, and also switch to ENUM_NAME naming
-// style.
-enum IceGatheringState {
- kIceGatheringNew = 0,
- kIceGatheringGathering,
- kIceGatheringComplete,
-};
-
-enum ContinualGatheringPolicy {
- // All port allocator sessions will stop after a writable connection is found.
- GATHER_ONCE = 0,
- // The most recent port allocator session will keep on running.
- GATHER_CONTINUALLY,
- // The most recent port allocator session will keep on running, and it will
- // try to recover connectivity if the channel becomes disconnected.
- GATHER_CONTINUALLY_AND_RECOVER,
-};
-
-// Stats that we can return about the connections for a transport channel.
-// TODO(hta): Rename to ConnectionStats
-struct ConnectionInfo {
- ConnectionInfo()
- : best_connection(false),
- writable(false),
- receiving(false),
- timeout(false),
- new_connection(false),
- rtt(0),
- sent_total_bytes(0),
- sent_bytes_second(0),
- sent_discarded_packets(0),
- sent_total_packets(0),
- sent_ping_requests_total(0),
- sent_ping_requests_before_first_response(0),
- sent_ping_responses(0),
- recv_total_bytes(0),
- recv_bytes_second(0),
- recv_ping_requests(0),
- recv_ping_responses(0),
- key(NULL) {}
-
- bool best_connection; // Is this the best connection we have?
- bool writable; // Has this connection received a STUN response?
- bool receiving; // Has this connection received anything?
- bool timeout; // Has this connection timed out?
- bool new_connection; // Is this a newly created connection?
- size_t rtt; // The STUN RTT for this connection.
- size_t sent_total_bytes; // Total bytes sent on this connection.
- size_t sent_bytes_second; // Bps over the last measurement interval.
- size_t sent_discarded_packets; // Number of outgoing packets discarded due to
- // socket errors.
- size_t sent_total_packets; // Number of total outgoing packets attempted for
- // sending.
- size_t sent_ping_requests_total; // Number of STUN ping request sent.
- size_t sent_ping_requests_before_first_response; // Number of STUN ping
- // sent before receiving the first response.
- size_t sent_ping_responses; // Number of STUN ping response sent.
-
- size_t recv_total_bytes; // Total bytes received on this connection.
- size_t recv_bytes_second; // Bps over the last measurement interval.
- size_t recv_ping_requests; // Number of STUN ping request received.
- size_t recv_ping_responses; // Number of STUN ping response received.
- Candidate local_candidate; // The local candidate for this connection.
- Candidate remote_candidate; // The remote candidate for this connection.
- void* key; // A static value that identifies this conn.
-};
-
-// Information about all the connections of a channel.
-typedef std::vector<ConnectionInfo> ConnectionInfos;
-
-// Information about a specific channel
-struct TransportChannelStats {
- int component = 0;
- ConnectionInfos connection_infos;
- int srtp_crypto_suite = rtc::SRTP_INVALID_CRYPTO_SUITE;
- int ssl_cipher_suite = rtc::TLS_NULL_WITH_NULL_NULL;
-};
-
-// Information about all the channels of a transport.
-// TODO(hta): Consider if a simple vector is as good as a map.
-typedef std::vector<TransportChannelStats> TransportChannelStatsList;
-
-// Information about the stats of a transport.
-struct TransportStats {
- std::string transport_name;
- TransportChannelStatsList channel_stats;
-};
-
-// ICE Nomination mode.
-enum class NominationMode {
- REGULAR, // Nominate once per ICE restart (Not implemented yet).
- AGGRESSIVE, // Nominate every connection except that it will behave as if
- // REGULAR when the remote is an ICE-LITE endpoint.
- SEMI_AGGRESSIVE // Our current implementation of the nomination algorithm.
- // The details are described in P2PTransportChannel.
-};
-
-// Information about ICE configuration.
-// TODO(deadbeef): Use rtc::Optional to represent unset values, instead of
-// -1.
-struct IceConfig {
- // The ICE connection receiving timeout value in milliseconds.
- int receiving_timeout = -1;
- // Time interval in milliseconds to ping a backup connection when the ICE
- // channel is strongly connected.
- int backup_connection_ping_interval = -1;
-
- ContinualGatheringPolicy continual_gathering_policy = GATHER_ONCE;
-
- bool gather_continually() const {
- return continual_gathering_policy == GATHER_CONTINUALLY ||
- continual_gathering_policy == GATHER_CONTINUALLY_AND_RECOVER;
- }
-
- // Whether we should prioritize Relay/Relay candidate when nothing
- // is writable yet.
- bool prioritize_most_likely_candidate_pairs = false;
-
- // Writable connections are pinged at a slower rate once stablized.
- int stable_writable_connection_ping_interval = -1;
-
- // If set to true, this means the ICE transport should presume TURN-to-TURN
- // candidate pairs will succeed, even before a binding response is received.
- bool presume_writable_when_fully_relayed = false;
-
- // Interval to check on all networks and to perform ICE regathering on any
- // active network having no connection on it.
- rtc::Optional<int> regather_on_failed_networks_interval;
-
- // The time period in which we will not switch the selected connection
- // when a new connection becomes receiving but the selected connection is not
- // in case that the selected connection may become receiving soon.
- rtc::Optional<int> receiving_switching_delay;
-
- // TODO(honghaiz): Change the default to regular nomination.
- // Default nomination mode if the remote does not support renomination.
- NominationMode default_nomination_mode = NominationMode::SEMI_AGGRESSIVE;
-
- IceConfig() {}
- IceConfig(int receiving_timeout_ms,
- int backup_connection_ping_interval,
- ContinualGatheringPolicy gathering_policy,
- bool prioritize_most_likely_candidate_pairs,
- int stable_writable_connection_ping_interval_ms,
- bool presume_writable_when_fully_relayed,
- int regather_on_failed_networks_interval_ms,
- int receiving_switching_delay_ms)
- : receiving_timeout(receiving_timeout_ms),
- backup_connection_ping_interval(backup_connection_ping_interval),
- continual_gathering_policy(gathering_policy),
- prioritize_most_likely_candidate_pairs(
- prioritize_most_likely_candidate_pairs),
- stable_writable_connection_ping_interval(
- stable_writable_connection_ping_interval_ms),
- presume_writable_when_fully_relayed(
- presume_writable_when_fully_relayed),
- regather_on_failed_networks_interval(
- regather_on_failed_networks_interval_ms),
- receiving_switching_delay(receiving_switching_delay_ms) {}
-};
-
-bool BadTransportDescription(const std::string& desc, std::string* err_desc);
-
-bool IceCredentialsChanged(const std::string& old_ufrag,
- const std::string& old_pwd,
- const std::string& new_ufrag,
- const std::string& new_pwd);
-
-// If a candidate is not acceptable, returns false and sets error.
-bool VerifyCandidate(const Candidate& candidate, std::string* error);
-bool VerifyCandidates(const Candidates& candidates, std::string* error);
-
-// Helper class used by TransportController 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).
-// TODO(deadbeef): Move this into /pc/ and out of /p2p/base/, since it's
-// PeerConnection-specific.
-class JsepTransport : public sigslot::has_slots<> {
- public:
- // |mid| is just used for log statements in order to identify the Transport.
- // Note that |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>& certificate);
-
- // Returns the MID of this transport.
- const std::string& mid() const { return mid_; }
-
- // Add or remove channel that is affected when a local/remote transport
- // description is set on this transport. Need to add all channels before
- // setting a transport description.
- bool AddChannel(TransportChannelImpl* dtls, int component);
- bool RemoveChannel(int component);
- bool HasChannels() const;
-
- bool ready_for_remote_candidates() const {
- return local_description_set_ && remote_description_set_;
- }
-
- // Must be called before applying local session description.
- // Needed in order to verify the local fingerprint.
- void SetLocalCertificate(
- const rtc::scoped_refptr<rtc::RTCCertificate>& certificate);
-
- // Get a copy of the local certificate provided by SetLocalCertificate.
- bool GetLocalCertificate(
- rtc::scoped_refptr<rtc::RTCCertificate>* certificate) const;
-
- // Set the local TransportDescription to be used by DTLS and ICE channels
- // that are part of this Transport.
- bool SetLocalTransportDescription(const TransportDescription& description,
- ContentAction action,
- std::string* error_desc);
-
- // Set the remote TransportDescription to be used by DTLS and ICE channels
- // that are part of this Transport.
- bool SetRemoteTransportDescription(const TransportDescription& description,
- ContentAction action,
- std::string* error_desc);
-
- void GetSslRole(rtc::SSLRole* ssl_role) const;
-
- // TODO(deadbeef): Make this const. See comment in transportcontroller.h.
- bool GetStats(TransportStats* stats);
-
- // The current local transport description, possibly used
- // by the transport controller.
- const TransportDescription* local_description() const {
- return local_description_.get();
- }
-
- // The current remote transport description, possibly used
- // by the transport controller.
- const TransportDescription* remote_description() const {
- return remote_description_.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 false if the certificate's identity does not match the fingerprint,
- // or either is NULL.
- bool VerifyCertificateFingerprint(const rtc::RTCCertificate* certificate,
- const rtc::SSLFingerprint* fingerprint,
- std::string* error_desc) const;
-
- // Negotiates the SSL role based off the offer and answer as specified by
- // RFC 4145, section-4.1. Returns false if the SSL role cannot be determined
- // from the local description and remote description.
- bool NegotiateRole(ContentAction local_role,
- rtc::SSLRole* ssl_role,
- std::string* error_desc) const;
-
- private:
- TransportChannelImpl* GetChannel(int component);
-
- // Negotiates the transport parameters based on the current local and remote
- // transport description, such as the ICE role to use, and whether DTLS
- // should be activated.
- //
- // Called when an answer TransportDescription is applied.
- bool NegotiateTransportDescription(ContentAction local_role,
- std::string* error_desc);
-
- // Pushes down the transport parameters from the local description, such
- // as the ICE ufrag and pwd.
- bool ApplyLocalTransportDescription(TransportChannelImpl* channel,
- std::string* error_desc);
-
- // Pushes down the transport parameters from the remote description to the
- // transport channel.
- bool ApplyRemoteTransportDescription(TransportChannelImpl* channel,
- std::string* error_desc);
-
- // Pushes down the transport parameters obtained via negotiation.
- bool ApplyNegotiatedTransportDescription(TransportChannelImpl* channel,
- std::string* error_desc);
-
- const std::string mid_;
- rtc::scoped_refptr<rtc::RTCCertificate> certificate_;
- rtc::SSLRole secure_role_ = rtc::SSL_CLIENT;
- std::unique_ptr<rtc::SSLFingerprint> remote_fingerprint_;
- std::unique_ptr<TransportDescription> local_description_;
- std::unique_ptr<TransportDescription> remote_description_;
- bool local_description_set_ = false;
- bool remote_description_set_ = false;
-
- // Candidate component => DTLS channel
- std::map<int, TransportChannelImpl*> channels_;
-
- RTC_DISALLOW_COPY_AND_ASSIGN(JsepTransport);
-};
-
-} // namespace cricket
-
-#endif // WEBRTC_P2P_BASE_JSEPTRANSPORT_H_
« no previous file with comments | « webrtc/p2p/base/faketransportcontroller.h ('k') | webrtc/p2p/base/jseptransport.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698