| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/libjingle_transport_factory.h" | 5 #include "remoting/protocol/libjingle_transport_factory.h" |
| 6 | 6 |
| 7 #include "jingle/glue/channel_socket_adapter.h" | 7 #include "jingle/glue/channel_socket_adapter.h" |
| 8 #include "jingle/glue/pseudotcp_adapter.h" | 8 #include "jingle/glue/pseudotcp_adapter.h" |
| 9 #include "jingle/glue/utils.h" |
| 9 #include "net/base/net_errors.h" | 10 #include "net/base/net_errors.h" |
| 10 #include "remoting/protocol/channel_authenticator.h" | 11 #include "remoting/protocol/channel_authenticator.h" |
| 11 #include "remoting/protocol/transport_config.h" | 12 #include "remoting/protocol/transport_config.h" |
| 12 #include "third_party/libjingle/source/talk/base/basicpacketsocketfactory.h" | 13 #include "third_party/libjingle/source/talk/base/basicpacketsocketfactory.h" |
| 13 #include "third_party/libjingle/source/talk/base/network.h" | 14 #include "third_party/libjingle/source/talk/base/network.h" |
| 14 #include "third_party/libjingle/source/talk/p2p/base/p2ptransportchannel.h" | 15 #include "third_party/libjingle/source/talk/p2p/base/p2ptransportchannel.h" |
| 15 #include "third_party/libjingle/source/talk/p2p/client/httpportallocator.h" | 16 #include "third_party/libjingle/source/talk/p2p/client/httpportallocator.h" |
| 16 | 17 |
| 17 namespace remoting { | 18 namespace remoting { |
| 18 namespace protocol { | 19 namespace protocol { |
| (...skipping 25 matching lines...) Expand all Loading... |
| 44 virtual void Connect( | 45 virtual void Connect( |
| 45 const StreamTransport::ConnectedCallback& callback) OVERRIDE; | 46 const StreamTransport::ConnectedCallback& callback) OVERRIDE; |
| 46 virtual void AddRemoteCandidate(const cricket::Candidate& candidate) OVERRIDE; | 47 virtual void AddRemoteCandidate(const cricket::Candidate& candidate) OVERRIDE; |
| 47 virtual const std::string& name() const OVERRIDE; | 48 virtual const std::string& name() const OVERRIDE; |
| 48 virtual bool is_connected() const OVERRIDE; | 49 virtual bool is_connected() const OVERRIDE; |
| 49 | 50 |
| 50 private: | 51 private: |
| 51 void OnRequestSignaling(); | 52 void OnRequestSignaling(); |
| 52 void OnCandidateReady(cricket::TransportChannelImpl* channel, | 53 void OnCandidateReady(cricket::TransportChannelImpl* channel, |
| 53 const cricket::Candidate& candidate); | 54 const cricket::Candidate& candidate); |
| 55 void OnRouteChange(cricket::TransportChannel* channel, |
| 56 const cricket::Candidate& candidate); |
| 54 | 57 |
| 55 void OnTcpConnected(int result); | 58 void OnTcpConnected(int result); |
| 56 void OnAuthenticationDone(net::Error error, | 59 void OnAuthenticationDone(net::Error error, |
| 57 scoped_ptr<net::StreamSocket> socket); | 60 scoped_ptr<net::StreamSocket> socket); |
| 58 | 61 |
| 59 void OnChannelDestroyed(); | 62 void OnChannelDestroyed(); |
| 60 | 63 |
| 61 void NotifyConnected(scoped_ptr<net::StreamSocket> socket); | 64 void NotifyConnected(scoped_ptr<net::StreamSocket> socket); |
| 62 void NotifyConnectFailed(); | 65 void NotifyConnectFailed(); |
| 63 | 66 |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 142 port_allocator_->SetPortRange(config_.min_port, config_.max_port); | 145 port_allocator_->SetPortRange(config_.min_port, config_.max_port); |
| 143 | 146 |
| 144 // Create P2PTransportChannel, attach signal handlers and connect it. | 147 // Create P2PTransportChannel, attach signal handlers and connect it. |
| 145 DCHECK(!channel_.get()); | 148 DCHECK(!channel_.get()); |
| 146 channel_.reset(new cricket::P2PTransportChannel( | 149 channel_.reset(new cricket::P2PTransportChannel( |
| 147 name_, "", NULL, port_allocator_.get())); | 150 name_, "", NULL, port_allocator_.get())); |
| 148 channel_->SignalRequestSignaling.connect( | 151 channel_->SignalRequestSignaling.connect( |
| 149 this, &LibjingleStreamTransport::OnRequestSignaling); | 152 this, &LibjingleStreamTransport::OnRequestSignaling); |
| 150 channel_->SignalCandidateReady.connect( | 153 channel_->SignalCandidateReady.connect( |
| 151 this, &LibjingleStreamTransport::OnCandidateReady); | 154 this, &LibjingleStreamTransport::OnCandidateReady); |
| 155 channel_->SignalRouteChange.connect( |
| 156 this, &LibjingleStreamTransport::OnRouteChange); |
| 152 | 157 |
| 153 channel_->Connect(); | 158 channel_->Connect(); |
| 154 | 159 |
| 155 // Create net::Socket adapter for the P2PTransportChannel. | 160 // Create net::Socket adapter for the P2PTransportChannel. |
| 156 scoped_ptr<jingle_glue::TransportChannelSocketAdapter> channel_adapter( | 161 scoped_ptr<jingle_glue::TransportChannelSocketAdapter> channel_adapter( |
| 157 new jingle_glue::TransportChannelSocketAdapter(channel_.get())); | 162 new jingle_glue::TransportChannelSocketAdapter(channel_.get())); |
| 158 channel_adapter->SetOnDestroyedCallback(base::Bind( | 163 channel_adapter->SetOnDestroyedCallback(base::Bind( |
| 159 &LibjingleStreamTransport::OnChannelDestroyed, base::Unretained(this))); | 164 &LibjingleStreamTransport::OnChannelDestroyed, base::Unretained(this))); |
| 160 | 165 |
| 161 // Configure and connect PseudoTCP adapter. | 166 // Configure and connect PseudoTCP adapter. |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 194 channel_->OnSignalingReady(); | 199 channel_->OnSignalingReady(); |
| 195 } | 200 } |
| 196 | 201 |
| 197 void LibjingleStreamTransport::OnCandidateReady( | 202 void LibjingleStreamTransport::OnCandidateReady( |
| 198 cricket::TransportChannelImpl* channel, | 203 cricket::TransportChannelImpl* channel, |
| 199 const cricket::Candidate& candidate) { | 204 const cricket::Candidate& candidate) { |
| 200 DCHECK(CalledOnValidThread()); | 205 DCHECK(CalledOnValidThread()); |
| 201 event_handler_->OnTransportCandidate(this, candidate); | 206 event_handler_->OnTransportCandidate(this, candidate); |
| 202 } | 207 } |
| 203 | 208 |
| 209 void LibjingleStreamTransport::OnRouteChange( |
| 210 cricket::TransportChannel* channel, |
| 211 const cricket::Candidate& candidate) { |
| 212 TransportRoute route; |
| 213 |
| 214 if (candidate.type() == "local") { |
| 215 route.type = TransportRoute::DIRECT; |
| 216 } else if (candidate.type() == "stun") { |
| 217 route.type = TransportRoute::STUN; |
| 218 } else if (candidate.type() == "relay") { |
| 219 route.type = TransportRoute::RELAY; |
| 220 } else { |
| 221 LOG(FATAL) << "Unknown candidate type: " << candidate.type(); |
| 222 } |
| 223 |
| 224 if (!jingle_glue::SocketAddressToIPEndPoint( |
| 225 candidate.address(), &route.remote_address)) { |
| 226 LOG(FATAL) << "Failed to convert peer IP address."; |
| 227 } |
| 228 |
| 229 DCHECK(channel->GetP2PChannel()); |
| 230 DCHECK(channel->GetP2PChannel()->best_connection()); |
| 231 const cricket::Candidate& local_candidate = |
| 232 channel->GetP2PChannel()->best_connection()->local_candidate(); |
| 233 if (!jingle_glue::SocketAddressToIPEndPoint( |
| 234 local_candidate.address(), &route.local_address)) { |
| 235 LOG(FATAL) << "Failed to convert local IP address."; |
| 236 } |
| 237 |
| 238 event_handler_->OnTransportRouteChange(this, route); |
| 239 } |
| 240 |
| 204 void LibjingleStreamTransport::OnTcpConnected(int result) { | 241 void LibjingleStreamTransport::OnTcpConnected(int result) { |
| 205 DCHECK(CalledOnValidThread()); | 242 DCHECK(CalledOnValidThread()); |
| 206 | 243 |
| 207 if (result != net::OK) { | 244 if (result != net::OK) { |
| 208 NotifyConnectFailed(); | 245 NotifyConnectFailed(); |
| 209 return; | 246 return; |
| 210 } | 247 } |
| 211 | 248 |
| 212 authenticator_->SecureAndAuthenticate( | 249 authenticator_->SecureAndAuthenticate( |
| 213 socket_.PassAs<net::StreamSocket>(), | 250 socket_.PassAs<net::StreamSocket>(), |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 267 | 304 |
| 268 scoped_ptr<DatagramTransport> | 305 scoped_ptr<DatagramTransport> |
| 269 LibjingleTransportFactory::CreateDatagramTransport() { | 306 LibjingleTransportFactory::CreateDatagramTransport() { |
| 270 NOTIMPLEMENTED(); | 307 NOTIMPLEMENTED(); |
| 271 return scoped_ptr<DatagramTransport>(NULL); | 308 return scoped_ptr<DatagramTransport>(NULL); |
| 272 } | 309 } |
| 273 | 310 |
| 274 | 311 |
| 275 } // namespace protocol | 312 } // namespace protocol |
| 276 } // namespace remoting | 313 } // namespace remoting |
| OLD | NEW |