| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2015 The WebRTC Project Authors. All rights reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| 11 #ifndef WEBRTC_P2P_BASE_TRANSPORTCONTROLLER_H_ | 11 #ifndef WEBRTC_P2P_BASE_TRANSPORTCONTROLLER_H_ |
| 12 #define WEBRTC_P2P_BASE_TRANSPORTCONTROLLER_H_ | 12 #define WEBRTC_P2P_BASE_TRANSPORTCONTROLLER_H_ |
| 13 | 13 |
| 14 #include <map> | 14 #include <map> |
| 15 #include <memory> | 15 #include <memory> |
| 16 #include <string> | 16 #include <string> |
| 17 #include <vector> | 17 #include <vector> |
| 18 | 18 |
| 19 #include "webrtc/base/asyncinvoker.h" | 19 #include "webrtc/base/asyncinvoker.h" |
| 20 #include "webrtc/base/constructormagic.h" |
| 21 #include "webrtc/base/refcountedobject.h" |
| 20 #include "webrtc/base/sigslot.h" | 22 #include "webrtc/base/sigslot.h" |
| 21 #include "webrtc/base/sslstreamadapter.h" | 23 #include "webrtc/base/sslstreamadapter.h" |
| 22 #include "webrtc/p2p/base/candidate.h" | 24 #include "webrtc/p2p/base/candidate.h" |
| 23 #include "webrtc/p2p/base/dtlstransportchannel.h" | 25 #include "webrtc/p2p/base/dtlstransportchannel.h" |
| 24 #include "webrtc/p2p/base/jseptransport.h" | 26 #include "webrtc/p2p/base/jseptransport.h" |
| 25 #include "webrtc/p2p/base/p2ptransportchannel.h" | 27 #include "webrtc/p2p/base/p2ptransportchannel.h" |
| 26 | 28 |
| 27 namespace rtc { | 29 namespace rtc { |
| 28 class Thread; | 30 class Thread; |
| 29 class PacketTransportInterface; | 31 class PacketTransportInterface; |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 166 const std::string& transport_name, | 168 const std::string& transport_name, |
| 167 int component); | 169 int component); |
| 168 virtual TransportChannelImpl* CreateDtlsTransportChannel_n( | 170 virtual TransportChannelImpl* CreateDtlsTransportChannel_n( |
| 169 const std::string& transport_name, | 171 const std::string& transport_name, |
| 170 int component, | 172 int component, |
| 171 TransportChannelImpl* ice); | 173 TransportChannelImpl* ice); |
| 172 | 174 |
| 173 private: | 175 private: |
| 174 void OnMessage(rtc::Message* pmsg) override; | 176 void OnMessage(rtc::Message* pmsg) override; |
| 175 | 177 |
| 176 // This structure groups the DTLS and ICE channels, and helps keep track of | 178 class ChannelPair; |
| 177 // how many external objects (BaseChannels) reference each channel. | 179 typedef rtc::RefCountedObject<ChannelPair> RefCountedChannel; |
| 178 struct RefCountedChannel { | |
| 179 RefCountedChannel() = default; | |
| 180 // TODO(deadbeef): Change the types of |dtls| and |ice| to | |
| 181 // DtlsTransportChannelWrapper and P2PTransportChannelWrapper, | |
| 182 // once TransportChannelImpl is removed. | |
| 183 explicit RefCountedChannel(TransportChannelImpl* dtls, | |
| 184 TransportChannelImpl* ice) | |
| 185 : ice_(ice), dtls_(dtls), ref_(0) {} | |
| 186 | |
| 187 void AddRef() { ++ref_; } | |
| 188 void DecRef() { | |
| 189 ASSERT(ref_ > 0); | |
| 190 --ref_; | |
| 191 } | |
| 192 int ref() const { return ref_; } | |
| 193 | |
| 194 // Currently, all ICE-related calls still go through this DTLS channel. But | |
| 195 // that will change once we get rid of TransportChannelImpl, and the DTLS | |
| 196 // channel interface no longer includes ICE-specific methods. | |
| 197 const TransportChannelImpl* dtls() const { return dtls_.get(); } | |
| 198 TransportChannelImpl* dtls() { return dtls_.get(); } | |
| 199 const TransportChannelImpl* ice() const { return ice_.get(); } | |
| 200 TransportChannelImpl* ice() { return ice_.get(); } | |
| 201 | |
| 202 private: | |
| 203 std::unique_ptr<TransportChannelImpl> ice_; | |
| 204 std::unique_ptr<TransportChannelImpl> dtls_; | |
| 205 int ref_ = 0; | |
| 206 }; | |
| 207 | 180 |
| 208 // Helper functions to get a channel or transport, or iterator to it (in case | 181 // Helper functions to get a channel or transport, or iterator to it (in case |
| 209 // it needs to be erased). | 182 // it needs to be erased). |
| 210 std::vector<RefCountedChannel>::iterator GetChannelIterator_n( | 183 std::vector<RefCountedChannel*>::iterator GetChannelIterator_n( |
| 211 const std::string& transport_name, | 184 const std::string& transport_name, |
| 212 int component); | 185 int component); |
| 213 std::vector<RefCountedChannel>::const_iterator GetChannelIterator_n( | 186 std::vector<RefCountedChannel*>::const_iterator GetChannelIterator_n( |
| 214 const std::string& transport_name, | 187 const std::string& transport_name, |
| 215 int component) const; | 188 int component) const; |
| 216 const JsepTransport* GetJsepTransport( | 189 const JsepTransport* GetJsepTransport( |
| 217 const std::string& transport_name) const; | 190 const std::string& transport_name) const; |
| 218 JsepTransport* GetJsepTransport(const std::string& transport_name); | 191 JsepTransport* GetJsepTransport(const std::string& transport_name); |
| 219 const RefCountedChannel* GetChannel_n(const std::string& transport_name, | 192 const RefCountedChannel* GetChannel_n(const std::string& transport_name, |
| 220 int component) const; | 193 int component) const; |
| 221 RefCountedChannel* GetChannel_n(const std::string& transport_name, | 194 RefCountedChannel* GetChannel_n(const std::string& transport_name, |
| 222 int component); | 195 int component); |
| 223 | 196 |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 267 | 240 |
| 268 void UpdateAggregateStates_n(); | 241 void UpdateAggregateStates_n(); |
| 269 | 242 |
| 270 void OnDtlsHandshakeError(rtc::SSLHandshakeError error); | 243 void OnDtlsHandshakeError(rtc::SSLHandshakeError error); |
| 271 | 244 |
| 272 rtc::Thread* const signaling_thread_ = nullptr; | 245 rtc::Thread* const signaling_thread_ = nullptr; |
| 273 rtc::Thread* const network_thread_ = nullptr; | 246 rtc::Thread* const network_thread_ = nullptr; |
| 274 PortAllocator* const port_allocator_ = nullptr; | 247 PortAllocator* const port_allocator_ = nullptr; |
| 275 | 248 |
| 276 std::map<std::string, std::unique_ptr<JsepTransport>> transports_; | 249 std::map<std::string, std::unique_ptr<JsepTransport>> transports_; |
| 277 std::vector<RefCountedChannel> channels_; | 250 std::vector<RefCountedChannel*> channels_; |
| 278 | 251 |
| 279 // Aggregate state for TransportChannelImpls. | 252 // Aggregate state for TransportChannelImpls. |
| 280 IceConnectionState connection_state_ = kIceConnectionConnecting; | 253 IceConnectionState connection_state_ = kIceConnectionConnecting; |
| 281 bool receiving_ = false; | 254 bool receiving_ = false; |
| 282 IceGatheringState gathering_state_ = kIceGatheringNew; | 255 IceGatheringState gathering_state_ = kIceGatheringNew; |
| 283 | 256 |
| 284 IceConfig ice_config_; | 257 IceConfig ice_config_; |
| 285 IceRole ice_role_ = ICEROLE_CONTROLLING; | 258 IceRole ice_role_ = ICEROLE_CONTROLLING; |
| 286 bool redetermine_role_on_ice_restart_; | 259 bool redetermine_role_on_ice_restart_; |
| 287 uint64_t ice_tiebreaker_ = rtc::CreateRandomId64(); | 260 uint64_t ice_tiebreaker_ = rtc::CreateRandomId64(); |
| 288 rtc::SSLProtocolVersion ssl_max_version_ = rtc::SSL_PROTOCOL_DTLS_12; | 261 rtc::SSLProtocolVersion ssl_max_version_ = rtc::SSL_PROTOCOL_DTLS_12; |
| 289 rtc::scoped_refptr<rtc::RTCCertificate> certificate_; | 262 rtc::scoped_refptr<rtc::RTCCertificate> certificate_; |
| 290 rtc::AsyncInvoker invoker_; | 263 rtc::AsyncInvoker invoker_; |
| 291 // True if QUIC is used instead of DTLS. | 264 // True if QUIC is used instead of DTLS. |
| 292 bool quic_ = false; | 265 bool quic_ = false; |
| 293 | 266 |
| 294 webrtc::MetricsObserverInterface* metrics_observer_ = nullptr; | 267 webrtc::MetricsObserverInterface* metrics_observer_ = nullptr; |
| 268 |
| 269 RTC_DISALLOW_COPY_AND_ASSIGN(TransportController); |
| 295 }; | 270 }; |
| 296 | 271 |
| 297 } // namespace cricket | 272 } // namespace cricket |
| 298 | 273 |
| 299 #endif // WEBRTC_P2P_BASE_TRANSPORTCONTROLLER_H_ | 274 #endif // WEBRTC_P2P_BASE_TRANSPORTCONTROLLER_H_ |
| OLD | NEW |