OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/chromium_port_allocator.h" | 5 #include "remoting/protocol/chromium_port_allocator.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/stl_util.h" | 8 #include "base/stl_util.h" |
9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
10 #include "net/http/http_status_code.h" | 10 #include "net/http/http_status_code.h" |
11 #include "net/url_request/url_fetcher.h" | 11 #include "net/url_request/url_fetcher.h" |
12 #include "net/url_request/url_fetcher_delegate.h" | 12 #include "net/url_request/url_fetcher_delegate.h" |
13 #include "net/url_request/url_request_context_getter.h" | 13 #include "net/url_request/url_request_context_getter.h" |
14 #include "remoting/protocol/chromium_socket_factory.h" | 14 #include "remoting/protocol/chromium_socket_factory.h" |
15 #include "remoting/protocol/network_settings.h" | |
16 #include "url/gurl.h" | 15 #include "url/gurl.h" |
17 | 16 |
18 namespace remoting { | 17 namespace remoting { |
19 namespace protocol { | 18 namespace protocol { |
20 | 19 |
21 namespace { | 20 namespace { |
22 | 21 |
23 class ChromiumPortAllocatorSession | 22 class ChromiumPortAllocatorSession |
24 : public cricket::HttpPortAllocatorSessionBase, | 23 : public cricket::HttpPortAllocatorSessionBase, |
25 public net::URLFetcherDelegate { | 24 public net::URLFetcherDelegate { |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
124 return; | 123 return; |
125 } | 124 } |
126 | 125 |
127 ReceiveSessionResponse(response); | 126 ReceiveSessionResponse(response); |
128 } | 127 } |
129 | 128 |
130 } // namespace | 129 } // namespace |
131 | 130 |
132 // static | 131 // static |
133 scoped_ptr<ChromiumPortAllocator> ChromiumPortAllocator::Create( | 132 scoped_ptr<ChromiumPortAllocator> ChromiumPortAllocator::Create( |
134 const scoped_refptr<net::URLRequestContextGetter>& url_context, | 133 const scoped_refptr<net::URLRequestContextGetter>& url_context) { |
135 const NetworkSettings& network_settings) { | |
136 scoped_ptr<rtc::NetworkManager> network_manager( | 134 scoped_ptr<rtc::NetworkManager> network_manager( |
137 new rtc::BasicNetworkManager()); | 135 new rtc::BasicNetworkManager()); |
138 scoped_ptr<rtc::PacketSocketFactory> socket_factory( | 136 scoped_ptr<rtc::PacketSocketFactory> socket_factory( |
139 new ChromiumPacketSocketFactory()); | 137 new ChromiumPacketSocketFactory()); |
140 scoped_ptr<ChromiumPortAllocator> result( | 138 return make_scoped_ptr(new ChromiumPortAllocator( |
141 new ChromiumPortAllocator(url_context, network_manager.Pass(), | 139 url_context, network_manager.Pass(), socket_factory.Pass())); |
142 socket_factory.Pass())); | |
143 | |
144 // We always use PseudoTcp to provide a reliable channel. It provides poor | |
145 // performance when combined with TCP-based transport, so we have to disable | |
146 // TCP ports. ENABLE_SHARED_UFRAG flag is specified so that the same username | |
147 // fragment is shared between all candidates for this channel. | |
148 int flags = cricket::PORTALLOCATOR_DISABLE_TCP | | |
149 cricket::PORTALLOCATOR_ENABLE_SHARED_UFRAG | | |
150 cricket::PORTALLOCATOR_ENABLE_IPV6; | |
151 | |
152 if (!(network_settings.flags & NetworkSettings::NAT_TRAVERSAL_STUN)) | |
153 flags |= cricket::PORTALLOCATOR_DISABLE_STUN; | |
154 | |
155 if (!(network_settings.flags & NetworkSettings::NAT_TRAVERSAL_RELAY)) | |
156 flags |= cricket::PORTALLOCATOR_DISABLE_RELAY; | |
157 | |
158 result->set_flags(flags); | |
159 result->SetPortRange(network_settings.port_range.min_port, | |
160 network_settings.port_range.max_port); | |
161 | |
162 return result.Pass(); | |
163 } | 140 } |
164 | 141 |
165 ChromiumPortAllocator::ChromiumPortAllocator( | 142 ChromiumPortAllocator::ChromiumPortAllocator( |
166 const scoped_refptr<net::URLRequestContextGetter>& url_context, | 143 const scoped_refptr<net::URLRequestContextGetter>& url_context, |
167 scoped_ptr<rtc::NetworkManager> network_manager, | 144 scoped_ptr<rtc::NetworkManager> network_manager, |
168 scoped_ptr<rtc::PacketSocketFactory> socket_factory) | 145 scoped_ptr<rtc::PacketSocketFactory> socket_factory) |
169 : HttpPortAllocatorBase(network_manager.get(), | 146 : HttpPortAllocatorBase(network_manager.get(), |
170 socket_factory.get(), | 147 socket_factory.get(), |
171 std::string()), | 148 std::string()), |
172 url_context_(url_context), | 149 url_context_(url_context), |
173 network_manager_(network_manager.Pass()), | 150 network_manager_(network_manager.Pass()), |
174 socket_factory_(socket_factory.Pass()) {} | 151 socket_factory_(socket_factory.Pass()) {} |
175 | 152 |
176 ChromiumPortAllocator::~ChromiumPortAllocator() { | 153 ChromiumPortAllocator::~ChromiumPortAllocator() {} |
177 } | |
178 | 154 |
179 cricket::PortAllocatorSession* ChromiumPortAllocator::CreateSessionInternal( | 155 cricket::PortAllocatorSession* ChromiumPortAllocator::CreateSessionInternal( |
180 const std::string& content_name, | 156 const std::string& content_name, |
181 int component, | 157 int component, |
182 const std::string& ice_username_fragment, | 158 const std::string& ice_username_fragment, |
183 const std::string& ice_password) { | 159 const std::string& ice_password) { |
184 return new ChromiumPortAllocatorSession( | 160 return new ChromiumPortAllocatorSession( |
185 this, content_name, component, ice_username_fragment, ice_password, | 161 this, content_name, component, ice_username_fragment, ice_password, |
186 stun_hosts(), relay_hosts(), relay_token(), url_context_); | 162 stun_hosts(), relay_hosts(), relay_token(), url_context_); |
187 } | 163 } |
188 | 164 |
| 165 ChromiumPortAllocatorFactory::ChromiumPortAllocatorFactory( |
| 166 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter) |
| 167 : url_request_context_getter_(url_request_context_getter) {} |
| 168 |
| 169 ChromiumPortAllocatorFactory::~ChromiumPortAllocatorFactory() {} |
| 170 |
| 171 scoped_ptr<cricket::HttpPortAllocatorBase> |
| 172 ChromiumPortAllocatorFactory::CreatePortAllocator() { |
| 173 return ChromiumPortAllocator::Create(url_request_context_getter_); |
| 174 } |
| 175 |
189 } // namespace protocol | 176 } // namespace protocol |
190 } // namespace remoting | 177 } // namespace remoting |
OLD | NEW |