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

Side by Side Diff: remoting/protocol/ice_transport.cc

Issue 1521883006: Add TransportContext class. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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 unified diff | Download patch
« no previous file with comments | « remoting/protocol/ice_transport.h ('k') | remoting/protocol/ice_transport_channel.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "remoting/protocol/ice_transport.h" 5 #include "remoting/protocol/ice_transport.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "remoting/protocol/channel_authenticator.h" 8 #include "remoting/protocol/channel_authenticator.h"
9 #include "remoting/protocol/channel_multiplexer.h" 9 #include "remoting/protocol/channel_multiplexer.h"
10 #include "remoting/protocol/pseudotcp_channel_factory.h" 10 #include "remoting/protocol/pseudotcp_channel_factory.h"
11 #include "remoting/protocol/secure_channel_factory.h" 11 #include "remoting/protocol/secure_channel_factory.h"
12 #include "remoting/protocol/stream_channel_factory.h" 12 #include "remoting/protocol/stream_channel_factory.h"
13 #include "remoting/protocol/transport_context.h"
13 14
14 namespace remoting { 15 namespace remoting {
15 namespace protocol { 16 namespace protocol {
16 17
17 // Delay after candidate creation before sending transport-info message to 18 // Delay after candidate creation before sending transport-info message to
18 // accumulate multiple candidates. This is an optimization to reduce number of 19 // accumulate multiple candidates. This is an optimization to reduce number of
19 // transport-info messages. 20 // transport-info messages.
20 const int kTransportInfoSendDelayMs = 20; 21 const int kTransportInfoSendDelayMs = 20;
21 22
22 // Name of the multiplexed channel. 23 // Name of the multiplexed channel.
23 static const char kMuxChannelName[] = "mux"; 24 static const char kMuxChannelName[] = "mux";
24 25
25 IceTransport::IceTransport(cricket::PortAllocator* port_allocator, 26 IceTransport::IceTransport(scoped_refptr<TransportContext> transport_context)
26 const NetworkSettings& network_settings, 27 : transport_context_(transport_context), weak_factory_(this) {
27 TransportRole role) 28 transport_context->Prepare();
28 : port_allocator_(port_allocator), 29 }
29 network_settings_(network_settings),
30 role_(role),
31 weak_factory_(this) {}
32 30
33 IceTransport::~IceTransport() { 31 IceTransport::~IceTransport() {
34 channel_multiplexer_.reset(); 32 channel_multiplexer_.reset();
35 DCHECK(channels_.empty()); 33 DCHECK(channels_.empty());
36 } 34 }
37 35
38 base::Closure IceTransport::GetCanStartClosure() {
39 return base::Bind(&IceTransport::OnCanStart,
40 weak_factory_.GetWeakPtr());
41 }
42
43 void IceTransport::Start(Transport::EventHandler* event_handler, 36 void IceTransport::Start(Transport::EventHandler* event_handler,
44 Authenticator* authenticator) { 37 Authenticator* authenticator) {
45 DCHECK(event_handler); 38 DCHECK(event_handler);
46 DCHECK(!event_handler_); 39 DCHECK(!event_handler_);
47 40
48 event_handler_ = event_handler; 41 event_handler_ = event_handler;
49 pseudotcp_channel_factory_.reset(new PseudoTcpChannelFactory(this)); 42 pseudotcp_channel_factory_.reset(new PseudoTcpChannelFactory(this));
50 secure_channel_factory_.reset(new SecureChannelFactory( 43 secure_channel_factory_.reset(new SecureChannelFactory(
51 pseudotcp_channel_factory_.get(), authenticator)); 44 pseudotcp_channel_factory_.get(), authenticator));
52 } 45 }
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 } 81 }
89 82
90 StreamChannelFactory* IceTransport::GetMultiplexedChannelFactory() { 83 StreamChannelFactory* IceTransport::GetMultiplexedChannelFactory() {
91 if (!channel_multiplexer_.get()) { 84 if (!channel_multiplexer_.get()) {
92 channel_multiplexer_.reset( 85 channel_multiplexer_.reset(
93 new ChannelMultiplexer(GetStreamChannelFactory(), kMuxChannelName)); 86 new ChannelMultiplexer(GetStreamChannelFactory(), kMuxChannelName));
94 } 87 }
95 return channel_multiplexer_.get(); 88 return channel_multiplexer_.get();
96 } 89 }
97 90
98 void IceTransport::OnCanStart() {
99 DCHECK(!can_start_);
100
101 can_start_ = true;
102 for (ChannelsMap::iterator it = channels_.begin(); it != channels_.end();
103 ++it) {
104 it->second->OnCanStart();
105 }
106 }
107
108 void IceTransport::CreateChannel(const std::string& name, 91 void IceTransport::CreateChannel(const std::string& name,
109 const ChannelCreatedCallback& callback) { 92 const ChannelCreatedCallback& callback) {
110 DCHECK(!channels_[name]); 93 DCHECK(!channels_[name]);
111 94
112 scoped_ptr<IceTransportChannel> channel( 95 scoped_ptr<IceTransportChannel> channel(
113 new IceTransportChannel(port_allocator_, network_settings_, role_)); 96 new IceTransportChannel(transport_context_));
114 if (can_start_)
115 channel->OnCanStart();
116 channel->Connect(name, this, callback); 97 channel->Connect(name, this, callback);
117 AddPendingRemoteTransportInfo(channel.get()); 98 AddPendingRemoteTransportInfo(channel.get());
118 channels_[name] = channel.release(); 99 channels_[name] = channel.release();
119 } 100 }
120 101
121 void IceTransport::CancelChannelCreation(const std::string& name) { 102 void IceTransport::CancelChannelCreation(const std::string& name) {
122 ChannelsMap::iterator it = channels_.find(name); 103 ChannelsMap::iterator it = channels_.find(name);
123 if (it != channels_.end()) { 104 if (it != channels_.end()) {
124 DCHECK(!it->second->is_connected()); 105 DCHECK(!it->second->is_connected());
125 delete it->second; 106 delete it->second;
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 } 179 }
199 } 180 }
200 181
201 void IceTransport::SendTransportInfo() { 182 void IceTransport::SendTransportInfo() {
202 DCHECK(pending_transport_info_message_); 183 DCHECK(pending_transport_info_message_);
203 event_handler_->OnOutgoingTransportInfo( 184 event_handler_->OnOutgoingTransportInfo(
204 pending_transport_info_message_->ToXml()); 185 pending_transport_info_message_->ToXml());
205 pending_transport_info_message_.reset(); 186 pending_transport_info_message_.reset();
206 } 187 }
207 188
189 IceTransportFactory::IceTransportFactory(
190 scoped_refptr<TransportContext> transport_context)
191 : transport_context_(transport_context) {}
192
193 IceTransportFactory::~IceTransportFactory() {}
194
195 scoped_ptr<Transport> IceTransportFactory::CreateTransport() {
196 return make_scoped_ptr(new IceTransport(transport_context_.get()));
197 }
198
208 } // namespace protocol 199 } // namespace protocol
209 } // namespace remoting 200 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/protocol/ice_transport.h ('k') | remoting/protocol/ice_transport_channel.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698