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

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

Issue 2517883002: Refactoring that removes P2PTransport and DtlsTransport classes. (Closed)
Patch Set: Adding stub transport.h file for backwards compat. 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/transport.h b/webrtc/p2p/base/jseptransport.h
similarity index 63%
copy from webrtc/p2p/base/transport.h
copy to webrtc/p2p/base/jseptransport.h
index adef6533ea9b41c635cb2ec327c039f1d43f4431..9684770bf7ad63f20f61b6f9457e9e3b3838f95f 100644
--- a/webrtc/p2p/base/transport.h
+++ b/webrtc/p2p/base/jseptransport.h
@@ -8,22 +8,8 @@
* 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_TRANSPORT_H_
-#define WEBRTC_P2P_BASE_TRANSPORT_H_
+#ifndef WEBRTC_P2P_BASE_JSEPTRANSPORT_H_
+#define WEBRTC_P2P_BASE_JSEPTRANSPORT_H_
#include <map>
#include <memory>
@@ -43,12 +29,14 @@
namespace cricket {
-class PortAllocator;
-class TransportChannel;
+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.
@@ -115,14 +103,14 @@ struct ConnectionInfo {
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.
+ 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
@@ -242,182 +230,138 @@ bool IceCredentialsChanged(const std::string& old_ufrag,
const std::string& new_ufrag,
const std::string& new_pwd);
-class Transport : public sigslot::has_slots<> {
- public:
- Transport(const std::string& name, PortAllocator* allocator);
- virtual ~Transport();
-
- // Returns the name of this transport.
- const std::string& name() const { return name_; }
+// 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);
- // Returns the port allocator object for this transport.
- PortAllocator* port_allocator() { return allocator_; }
+// 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).
+//
+// On Threading: Transport performs work solely on the network thread, and so
+// its methods should only be called on the network thread.
+//
+// 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_;
}
- void SetIceRole(IceRole role);
- IceRole ice_role() const { return ice_role_; }
-
- void SetIceTiebreaker(uint64_t IceTiebreaker) { tiebreaker_ = IceTiebreaker; }
- uint64_t IceTiebreaker() { return tiebreaker_; }
-
- void SetIceConfig(const IceConfig& config);
-
// Must be called before applying local session description.
- virtual void SetLocalCertificate(
- const rtc::scoped_refptr<rtc::RTCCertificate>& certificate) {}
+ // 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.
- virtual bool GetLocalCertificate(
- rtc::scoped_refptr<rtc::RTCCertificate>* certificate) {
- return false;
- }
-
- // Get a copy of the remote certificate in use by the specified channel.
- std::unique_ptr<rtc::SSLCertificate> GetRemoteSSLCertificate();
-
- // Create, destroy, and lookup the channels of this type by their components.
- TransportChannelImpl* CreateChannel(int component);
+ bool GetLocalCertificate(
+ rtc::scoped_refptr<rtc::RTCCertificate>* certificate) const;
- TransportChannelImpl* GetChannel(int component);
-
- bool HasChannel(int component) {
- return (NULL != GetChannel(component));
- }
- bool HasChannels();
-
- void DestroyChannel(int component);
-
- // Set the local TransportDescription to be used by TransportChannels.
+ // 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 TransportChannels.
+ // 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);
- // Tells channels to start gathering candidates if necessary.
- // Should be called after ConnectChannels() has been called at least once,
- // which will happen in SetLocalTransportDescription.
- void MaybeStartGathering();
-
- // Resets all of the channels back to their initial state. They are no
- // longer connecting.
- void ResetChannels();
-
- // Destroys every channel created so far.
- void DestroyAllChannels();
+ void GetSslRole(rtc::SSLRole* ssl_role) const;
+ // TODO(deadbeef): Make this const. See comment in transportcontroller.h.
bool GetStats(TransportStats* stats);
- // Called when one or more candidates are ready from the remote peer.
- bool AddRemoteCandidates(const std::vector<Candidate>& candidates,
- std::string* error);
- bool RemoveRemoteCandidates(const std::vector<Candidate>& candidates,
- std::string* error);
-
- virtual bool GetSslRole(rtc::SSLRole* ssl_role) const { return false; }
-
- // Must be called before channel is starting to connect.
- virtual bool SetSslMaxProtocolVersion(rtc::SSLProtocolVersion version) {
- return false;
- }
-
- // The current local transport description, for use by derived classes
- // when performing transport description negotiation, and possibly used
+ // 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, for use by derived classes
- // when performing transport description negotiation, and possibly used
+ // The current remote transport description, possibly used
// by the transport controller.
const TransportDescription* remote_description() const {
return remote_description_.get();
}
- protected:
- // These are called by Create/DestroyChannel above in order to create or
- // destroy the appropriate type of channel.
- virtual TransportChannelImpl* CreateTransportChannel(int component) = 0;
- virtual void DestroyTransportChannel(TransportChannelImpl* channel) = 0;
+ // 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.
- // Pushes down the transport parameters from the local description, such
- // as the ICE ufrag and pwd.
- // Derived classes can override, but must call the base as well.
- virtual bool ApplyLocalTransportDescription(TransportChannelImpl* channel,
- std::string* error_desc);
+ // 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;
- // Pushes down remote ice credentials from the remote description to the
- // transport channel.
- virtual bool ApplyRemoteTransportDescription(TransportChannelImpl* ch,
- std::string* error_desc);
+ // 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.
- // Derived classes can negotiate their specific parameters here, but must call
- // the base as well.
- virtual bool NegotiateTransportDescription(ContentAction local_role,
- std::string* error_desc);
+ //
+ // Called when an answer TransportDescription is applied.
+ bool NegotiateTransportDescription(ContentAction local_role,
+ std::string* error_desc);
- // Pushes down the transport parameters obtained via negotiation.
- // Derived classes can set their specific parameters here, but must call the
- // base as well.
- virtual bool ApplyNegotiatedTransportDescription(
- TransportChannelImpl* channel,
- 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);
- // Returns false if the certificate's identity does not match the fingerprint,
- // or either is NULL.
- virtual bool VerifyCertificateFingerprint(
- const rtc::RTCCertificate* certificate,
- const rtc::SSLFingerprint* fingerprint,
- std::string* error_desc) const;
+ // Pushes down the transport parameters from the remote description to the
+ // transport channel.
+ bool ApplyRemoteTransportDescription(TransportChannelImpl* channel,
+ std::string* error_desc);
- // 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.
- virtual bool NegotiateRole(ContentAction local_role,
- rtc::SSLRole* ssl_role,
- std::string* error_desc) const;
+ // Pushes down the transport parameters obtained via negotiation.
+ bool ApplyNegotiatedTransportDescription(TransportChannelImpl* channel,
+ std::string* error_desc);
- private:
- // If a candidate is not acceptable, returns false and sets error.
- // Call this before calling OnRemoteCandidates.
- bool VerifyCandidate(const Candidate& candidate, std::string* error);
- bool VerifyCandidates(const Candidates& candidates, std::string* error);
-
- // Candidate component => TransportChannelImpl*
- typedef std::map<int, TransportChannelImpl*> ChannelMap;
-
- // Helper function that invokes the given function on every channel.
- typedef void (TransportChannelImpl::* TransportChannelFunc)();
- void CallChannels(TransportChannelFunc func);
-
- const std::string name_;
- PortAllocator* const allocator_;
- bool channels_destroyed_ = false;
- IceRole ice_role_ = ICEROLE_UNKNOWN;
- uint64_t tiebreaker_ = 0;
- IceMode remote_ice_mode_ = ICEMODE_FULL;
- IceConfig ice_config_;
+ 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;
- ChannelMap channels_;
+ // Candidate component => DTLS channel
+ std::map<int, TransportChannelImpl*> channels_;
- RTC_DISALLOW_COPY_AND_ASSIGN(Transport);
+ RTC_DISALLOW_COPY_AND_ASSIGN(JsepTransport);
};
-
} // namespace cricket
-#endif // WEBRTC_P2P_BASE_TRANSPORT_H_
+#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