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

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

Issue 1380563002: Thinning out the Transport class. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fixing code style and naming. 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/transport_unittest.cc ('k') | webrtc/p2p/base/transportcontroller.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/p2p/base/transportcontroller.h
diff --git a/webrtc/p2p/base/transportcontroller.h b/webrtc/p2p/base/transportcontroller.h
index f506e01bcf770184b23c597b2c1770c8ebcd0ad3..45fcfeac8aca374245e1b3fdf9e1150d637d9c58 100644
--- a/webrtc/p2p/base/transportcontroller.h
+++ b/webrtc/p2p/base/transportcontroller.h
@@ -81,9 +81,14 @@ class TransportController : public sigslot::has_slots<>,
bool ReadyForRemoteCandidates(const std::string& transport_name);
bool GetStats(const std::string& transport_name, TransportStats* stats);
+ // Creates a channel if it doesn't exist. Otherwise, increments a reference
+ // count and returns an existing channel.
virtual TransportChannel* CreateTransportChannel_w(
const std::string& transport_name,
int component);
+
+ // Decrements a channel's reference count, and destroys the channel if
+ // nothing is referencing it.
virtual void DestroyTransportChannel_w(const std::string& transport_name,
int component);
@@ -121,6 +126,33 @@ class TransportController : public sigslot::has_slots<>,
private:
void OnMessage(rtc::Message* pmsg) override;
+ // It's the Transport that's currently responsible for creating/destroying
+ // channels, but the TransportController keeps track of how many external
+ // objects (BaseChannels) reference each channel.
+ struct RefCountedChannel {
+ RefCountedChannel() : impl_(nullptr), ref_(0) {}
+ explicit RefCountedChannel(TransportChannelImpl* impl)
+ : impl_(impl), ref_(0) {}
+
+ void AddRef() { ++ref_; }
+ void DecRef() {
+ ASSERT(ref_ > 0);
+ --ref_;
+ }
+ int ref() const { return ref_; }
+
+ TransportChannelImpl* get() const { return impl_; }
+ TransportChannelImpl* operator->() const { return impl_; }
+
+ private:
+ TransportChannelImpl* impl_;
+ int ref_;
+ };
+
+ std::vector<RefCountedChannel>::iterator FindChannel_w(
+ const std::string& transport_name,
+ int component);
+
Transport* GetOrCreateTransport_w(const std::string& transport_name);
void DestroyTransport_w(const std::string& transport_name);
void DestroyAllTransports_w();
@@ -152,29 +184,27 @@ class TransportController : public sigslot::has_slots<>,
bool GetStats_w(const std::string& transport_name, TransportStats* stats);
// Handlers for signals from Transport.
- void OnTransportConnecting_w(Transport* transport);
- void OnTransportWritableState_w(Transport* transport);
- void OnTransportReceivingState_w(Transport* transport);
- void OnTransportCompleted_w(Transport* transport);
- void OnTransportFailed_w(Transport* transport);
- void OnTransportGatheringState_w(Transport* transport);
- void OnTransportCandidatesGathered_w(
- Transport* transport,
- const std::vector<Candidate>& candidates);
- void OnTransportRoleConflict_w();
+ void OnChannelWritableState_w(TransportChannel* channel);
+ void OnChannelReceivingState_w(TransportChannel* channel);
+ void OnChannelGatheringState_w(TransportChannelImpl* channel);
+ void OnChannelCandidateGathered_w(TransportChannelImpl* channel,
+ const Candidate& candidate);
+ void OnChannelRoleConflict_w(TransportChannelImpl* channel);
+ void OnChannelConnectionRemoved_w(TransportChannelImpl* channel);
void UpdateAggregateStates_w();
- bool HasChannels_w();
rtc::Thread* const signaling_thread_ = nullptr;
rtc::Thread* const worker_thread_ = nullptr;
typedef std::map<std::string, Transport*> TransportMap;
TransportMap transports_;
+ std::vector<RefCountedChannel> channels_;
+
PortAllocator* const port_allocator_ = nullptr;
rtc::SSLProtocolVersion ssl_max_version_ = rtc::SSL_PROTOCOL_DTLS_10;
- // Aggregate state for Transports
+ // Aggregate state for TransportChannelImpls.
IceConnectionState connection_state_ = kIceConnectionConnecting;
bool receiving_ = false;
IceGatheringState gathering_state_ = kIceGatheringNew;
« no previous file with comments | « webrtc/p2p/base/transport_unittest.cc ('k') | webrtc/p2p/base/transportcontroller.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698