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

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

Issue 1350523003: TransportController refactoring. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fixing Mac test. Created 5 years, 3 months 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/portallocator.cc ('k') | webrtc/p2p/base/session.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/p2p/base/session.h
diff --git a/webrtc/p2p/base/session.h b/webrtc/p2p/base/session.h
index 8d7aa21c222b3c19d42ac943d3666d3a05f72cb2..d8721fd0f868bd43d3f711f6fdc63bea107af3e0 100644
--- a/webrtc/p2p/base/session.h
+++ b/webrtc/p2p/base/session.h
@@ -16,14 +16,14 @@
#include <string>
#include <vector>
-#include "webrtc/p2p/base/candidate.h"
-#include "webrtc/p2p/base/port.h"
-#include "webrtc/p2p/base/transport.h"
#include "webrtc/base/refcount.h"
#include "webrtc/base/rtccertificate.h"
#include "webrtc/base/scoped_ptr.h"
#include "webrtc/base/scoped_ref_ptr.h"
#include "webrtc/base/socketaddress.h"
+#include "webrtc/p2p/base/candidate.h"
+#include "webrtc/p2p/base/port.h"
+#include "webrtc/p2p/base/transport.h"
namespace cricket {
@@ -31,136 +31,8 @@ class BaseSession;
class P2PTransportChannel;
class Transport;
class TransportChannel;
-class TransportChannelProxy;
class TransportChannelImpl;
-
-typedef rtc::RefCountedObject<rtc::scoped_ptr<Transport> >
-TransportWrapper;
-
-// Bundles a Transport and ChannelMap together. ChannelMap is used to
-// create transport channels before receiving or sending a session
-// initiate, and for speculatively connecting channels. Previously, a
-// session had one ChannelMap and transport. Now, with multiple
-// transports per session, we need multiple ChannelMaps as well.
-
-typedef std::map<int, TransportChannelProxy*> ChannelMap;
-
-class TransportProxy : public sigslot::has_slots<> {
- public:
- TransportProxy(
- rtc::Thread* worker_thread,
- const std::string& sid,
- const std::string& content_name,
- TransportWrapper* transport)
- : worker_thread_(worker_thread),
- sid_(sid),
- content_name_(content_name),
- transport_(transport),
- connecting_(false),
- negotiated_(false),
- sent_candidates_(false),
- candidates_allocated_(false),
- local_description_set_(false),
- remote_description_set_(false) {
- transport_->get()->SignalCandidatesReady.connect(
- this, &TransportProxy::OnTransportCandidatesReady);
- }
- ~TransportProxy();
-
- const std::string& content_name() const { return content_name_; }
- // TODO(juberti): It's not good form to expose the object you're wrapping,
- // since callers can mutate it. Can we make this return a const Transport*?
- Transport* impl() const { return transport_->get(); }
-
- const std::string& type() const;
- bool negotiated() const { return negotiated_; }
- const Candidates& sent_candidates() const { return sent_candidates_; }
- const Candidates& unsent_candidates() const { return unsent_candidates_; }
- bool candidates_allocated() const { return candidates_allocated_; }
- void set_candidates_allocated(bool allocated) {
- candidates_allocated_ = allocated;
- }
-
- TransportChannel* GetChannel(int component);
- TransportChannel* CreateChannel(int component);
- bool HasChannel(int component);
- void DestroyChannel(int component);
-
- void AddSentCandidates(const Candidates& candidates);
- void AddUnsentCandidates(const Candidates& candidates);
- void ClearSentCandidates() { sent_candidates_.clear(); }
- void ClearUnsentCandidates() { unsent_candidates_.clear(); }
-
- // Start the connection process for any channels, creating impls if needed.
- void ConnectChannels();
- // Hook up impls to the proxy channels. Doesn't change connect state.
- void CompleteNegotiation();
-
- // Mux this proxy onto the specified proxy's transport.
- bool SetupMux(TransportProxy* proxy);
-
- // Simple functions that thunk down to the same functions on Transport.
- void SetIceRole(IceRole role);
- void SetCertificate(
- const rtc::scoped_refptr<rtc::RTCCertificate>& certificate);
- bool SetLocalTransportDescription(const TransportDescription& description,
- ContentAction action,
- std::string* error_desc);
- bool SetRemoteTransportDescription(const TransportDescription& description,
- ContentAction action,
- std::string* error_desc);
- void OnSignalingReady();
- bool OnRemoteCandidates(const Candidates& candidates, std::string* error);
-
- // Called when a transport signals that it has new candidates.
- void OnTransportCandidatesReady(cricket::Transport* transport,
- const Candidates& candidates) {
- SignalCandidatesReady(this, candidates);
- }
-
- bool local_description_set() const {
- return local_description_set_;
- }
- bool remote_description_set() const {
- return remote_description_set_;
- }
-
- // Handles sending of ready candidates and receiving of remote candidates.
- sigslot::signal2<TransportProxy*,
- const std::vector<Candidate>&> SignalCandidatesReady;
-
- private:
- TransportChannelProxy* GetChannelProxy(int component) const;
-
- // Creates a new channel on the Transport which causes the reference
- // count to increment.
- void CreateChannelImpl(int component);
- void CreateChannelImpl_w(int component);
-
- // Manipulators of transportchannelimpl in channel proxy.
- void SetChannelImplFromTransport(TransportChannelProxy* proxy, int component);
- void SetChannelImplFromTransport_w(TransportChannelProxy* proxy,
- int component);
- void ReplaceChannelImpl(TransportChannelProxy* proxy,
- TransportChannelImpl* impl);
- void ReplaceChannelImpl_w(TransportChannelProxy* proxy,
- TransportChannelImpl* impl);
-
- rtc::Thread* const worker_thread_;
- const std::string sid_;
- const std::string content_name_;
- rtc::scoped_refptr<TransportWrapper> transport_;
- bool connecting_;
- bool negotiated_;
- ChannelMap channels_;
- Candidates sent_candidates_;
- Candidates unsent_candidates_;
- bool candidates_allocated_;
- bool local_description_set_;
- bool remote_description_set_;
-};
-
-typedef std::map<std::string, TransportProxy*> TransportMap;
+class TransportController;
// Statistics for all the transports of this session.
typedef std::map<std::string, TransportStats> TransportStatsMap;
@@ -224,7 +96,6 @@ class BaseSession : public sigslot::has_slots<>,
rtc::Thread* worker_thread,
PortAllocator* port_allocator,
const std::string& sid,
- const std::string& content_type,
bool initiator);
virtual ~BaseSession();
@@ -236,14 +107,6 @@ class BaseSession : public sigslot::has_slots<>,
// The ID of this session.
const std::string& id() const { return sid_; }
- // TODO(juberti): This data is largely redundant, as it can now be obtained
- // from local/remote_description(). Remove these functions and members.
- // Returns the XML namespace identifying the type of this session.
- const std::string& content_type() const { return content_type_; }
-
- // Indicates whether we initiated this session.
- bool initiator() const { return initiator_; }
-
// Returns the application-level description given by our client.
// If we are the recipient, this will be NULL until we send an accept.
const SessionDescription* local_description() const;
@@ -260,6 +123,9 @@ class BaseSession : public sigslot::has_slots<>,
// Takes ownership of SessionDescription*
void set_remote_description(SessionDescription* sdesc);
+ void set_initiator(bool initiator);
+ bool initiator() const { return initiator_; }
+
const SessionDescription* initiator_description() const;
// Returns the current state of the session. See the enum above for details.
@@ -280,151 +146,29 @@ class BaseSession : public sigslot::has_slots<>,
// TODO(ronghuawu): remove the SetError method that doesn't take |error_desc|.
virtual void SetError(Error error, const std::string& error_desc);
- // Fired when the remote description is updated, with the updated
- // contents.
- sigslot::signal2<BaseSession* , const ContentInfos&>
- SignalRemoteDescriptionUpdate;
-
- // Fired when SetState is called (regardless if there's a state change), which
- // indicates the session description might have be updated.
- sigslot::signal2<BaseSession*, ContentAction> SignalNewLocalDescription;
-
- // Fired when SetState is called (regardless if there's a state change), which
- // indicates the session description might have be updated.
- sigslot::signal2<BaseSession*, ContentAction> SignalNewRemoteDescription;
-
- // Returns the transport that has been negotiated or NULL if
- // negotiation is still in progress.
- virtual Transport* GetTransport(const std::string& content_name);
-
- // Creates a new channel with the given names. This method may be called
- // immediately after creating the session. However, the actual
- // implementation may not be fixed until transport negotiation completes.
- // This will usually be called from the worker thread, but that
- // shouldn't be an issue since the main thread will be blocked in
- // Send when doing so.
- virtual TransportChannel* CreateChannel(const std::string& content_name,
- int component);
-
- // Returns the channel with the given names.
- virtual TransportChannel* GetChannel(const std::string& content_name,
- int component);
-
- // Destroys the channel with the given names.
- // This will usually be called from the worker thread, but that
- // shouldn't be an issue since the main thread will be blocked in
- // Send when doing so.
- virtual void DestroyChannel(const std::string& content_name,
- int component);
-
- // Set the ice connection receiving timeout.
void SetIceConnectionReceivingTimeout(int timeout_ms);
- // For testing.
- const rtc::scoped_refptr<rtc::RTCCertificate>&
- certificate_for_testing() const {
- return certificate_;
- }
+ // Start gathering candidates for any new transports, or transports doing an
+ // ICE restart.
+ void MaybeStartGathering();
protected:
- // Specifies the identity to use in this session.
- bool SetCertificate(
- const rtc::scoped_refptr<rtc::RTCCertificate>& certificate);
-
- bool SetSslMaxProtocolVersion(rtc::SSLProtocolVersion version);
-
bool PushdownTransportDescription(ContentSource source,
ContentAction action,
std::string* error_desc);
- void set_initiator(bool initiator) { initiator_ = initiator; }
-
- const TransportMap& transport_proxies() const { return transports_; }
- // Get a TransportProxy by content_name or transport. NULL if not found.
- TransportProxy* GetTransportProxy(const std::string& content_name);
- void DestroyTransportProxy(const std::string& content_name);
- // TransportProxy is owned by session. Return proxy just for convenience.
- TransportProxy* GetOrCreateTransportProxy(const std::string& content_name);
- // Creates the actual transport object. Overridable for testing.
- virtual Transport* CreateTransport(const std::string& content_name);
-
- void OnSignalingReady();
- void SpeculativelyConnectAllTransportChannels();
- // Helper method to provide remote candidates to the transport.
- bool OnRemoteCandidates(const std::string& content_name,
- const Candidates& candidates,
- std::string* error);
-
- // This method will mux transport channels by content_name.
- // First content is used for muxing.
- bool MaybeEnableMuxingSupport();
-
- // Called when a transport requests signaling.
- virtual void OnTransportRequestSignaling(Transport* transport) {
- }
-
- // Called when the first channel of a transport begins connecting. We use
- // this to start a timer, to make sure that the connection completes in a
- // reasonable amount of time.
- virtual void OnTransportConnecting(Transport* transport) {
- }
-
- // Called when a transport changes its writable state. We track this to make
- // sure that the transport becomes writable within a reasonable amount of
- // time. If this does not occur, we signal an error.
- virtual void OnTransportWritable(Transport* transport) {
- }
- virtual void OnTransportReadable(Transport* transport) {
- }
-
- virtual void OnTransportReceiving(Transport* transport) {
- }
-
- // Called when a transport has found its steady-state connections.
- virtual void OnTransportCompleted(Transport* transport) {
- }
-
- // Called when a transport has failed permanently.
- virtual void OnTransportFailed(Transport* transport) {
- }
-
- // Called when a transport signals that it has new candidates.
- virtual void OnTransportProxyCandidatesReady(TransportProxy* proxy,
- const Candidates& candidates) {
- }
-
- virtual void OnTransportRouteChange(
- Transport* transport,
- int component,
- const cricket::Candidate& remote_candidate) {
- }
-
- virtual void OnTransportCandidatesAllocationDone(Transport* transport);
-
- // Called when all transport channels allocated required candidates.
- // This method should be used as an indication of candidates gathering process
- // is completed and application can now send local candidates list to remote.
- virtual void OnCandidatesAllocationDone() {
- }
-
- // Handles the ice role change callback from Transport. This must be
- // propagated to all the transports.
- virtual void OnRoleConflict();
// Handles messages posted to us.
virtual void OnMessage(rtc::Message *pmsg);
- protected:
- bool IsCandidateAllocationDone() const;
+ TransportController* transport_controller() {
+ return transport_controller_.get();
+ }
+ protected:
State state_;
Error error_;
std::string error_desc_;
- // This method will delete the Transport and TransportChannelImpls
- // and replace those with the Transport object of the first
- // MediaContent in bundle_group.
- bool BundleContentGroup(const ContentGroup* bundle_group);
-
private:
// Helper methods to push local and remote transport descriptions.
bool PushdownLocalTransportDescription(
@@ -434,8 +178,6 @@ class BaseSession : public sigslot::has_slots<>,
const SessionDescription* sdesc, ContentAction action,
std::string* error_desc);
- void MaybeCandidateAllocationDone();
-
// Log session state.
void LogState(State old_state, State new_state);
@@ -449,21 +191,10 @@ class BaseSession : public sigslot::has_slots<>,
rtc::Thread* const worker_thread_;
PortAllocator* const port_allocator_;
const std::string sid_;
- const std::string content_type_;
bool initiator_;
- rtc::scoped_refptr<rtc::RTCCertificate> certificate_;
- rtc::SSLProtocolVersion ssl_max_version_;
+ rtc::scoped_ptr<TransportController> transport_controller_;
rtc::scoped_ptr<const SessionDescription> local_description_;
rtc::scoped_ptr<SessionDescription> remote_description_;
- uint64 ice_tiebreaker_;
- // This flag will be set to true after the first role switch. This flag
- // will enable us to stop any role switch during the call.
- bool role_switch_;
- TransportMap transports_;
-
- // Timeout value in milliseconds for which no ICE connection receives
- // any packets.
- int ice_receiving_timeout_;
};
} // namespace cricket
« no previous file with comments | « webrtc/p2p/base/portallocator.cc ('k') | webrtc/p2p/base/session.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698