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

Side by Side Diff: content/renderer/p2p/p2p_transport_impl.cc

Issue 7762008: Implement STUN support for P2P Transport API. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: - Created 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "content/renderer/p2p/p2p_transport_impl.h" 5 #include "content/renderer/p2p/p2p_transport_impl.h"
6 6
7 #include "content/renderer/p2p/ipc_network_manager.h" 7 #include "content/renderer/p2p/ipc_network_manager.h"
8 #include "content/renderer/p2p/ipc_socket_factory.h" 8 #include "content/renderer/p2p/ipc_socket_factory.h"
9 #include "content/renderer/p2p/port_allocator.h"
9 #include "content/renderer/render_view.h" 10 #include "content/renderer/render_view.h"
10 #include "jingle/glue/channel_socket_adapter.h" 11 #include "jingle/glue/channel_socket_adapter.h"
11 #include "jingle/glue/pseudotcp_adapter.h" 12 #include "jingle/glue/pseudotcp_adapter.h"
12 #include "jingle/glue/thread_wrapper.h" 13 #include "jingle/glue/thread_wrapper.h"
13 #include "jingle/glue/utils.h" 14 #include "jingle/glue/utils.h"
14 #include "net/base/net_errors.h" 15 #include "net/base/net_errors.h"
15 #include "third_party/libjingle/source/talk/p2p/base/p2ptransportchannel.h" 16 #include "third_party/libjingle/source/talk/p2p/base/p2ptransportchannel.h"
16 #include "third_party/libjingle/source/talk/p2p/client/basicportallocator.h" 17 #include "third_party/libjingle/source/talk/p2p/client/basicportallocator.h"
17 18
18 namespace content { 19 namespace content {
19 20
20 P2PTransportImpl::P2PTransportImpl( 21 P2PTransportImpl::P2PTransportImpl(
21 talk_base::NetworkManager* network_manager, 22 talk_base::NetworkManager* network_manager,
22 talk_base::PacketSocketFactory* socket_factory) 23 talk_base::PacketSocketFactory* socket_factory)
23 : event_handler_(NULL), 24 : socket_dispatcher_(NULL),
25 event_handler_(NULL),
24 state_(STATE_NONE), 26 state_(STATE_NONE),
25 network_manager_(network_manager), 27 network_manager_(network_manager),
26 socket_factory_(socket_factory), 28 socket_factory_(socket_factory),
27 ALLOW_THIS_IN_INITIALIZER_LIST(connect_callback_( 29 ALLOW_THIS_IN_INITIALIZER_LIST(connect_callback_(
28 this, &P2PTransportImpl::OnTcpConnected)) { 30 this, &P2PTransportImpl::OnTcpConnected)) {
29 } 31 }
30 32
31 P2PTransportImpl::P2PTransportImpl(P2PSocketDispatcher* socket_dispatcher) 33 P2PTransportImpl::P2PTransportImpl(P2PSocketDispatcher* socket_dispatcher)
32 : event_handler_(NULL), 34 : socket_dispatcher_(socket_dispatcher),
35 event_handler_(NULL),
33 state_(STATE_NONE), 36 state_(STATE_NONE),
34 network_manager_(new IpcNetworkManager(socket_dispatcher)), 37 network_manager_(new IpcNetworkManager(socket_dispatcher)),
35 socket_factory_(new IpcPacketSocketFactory(socket_dispatcher)), 38 socket_factory_(new IpcPacketSocketFactory(socket_dispatcher)),
36 ALLOW_THIS_IN_INITIALIZER_LIST(connect_callback_( 39 ALLOW_THIS_IN_INITIALIZER_LIST(connect_callback_(
37 this, &P2PTransportImpl::OnTcpConnected)) { 40 this, &P2PTransportImpl::OnTcpConnected)) {
41 DCHECK(socket_dispatcher);
38 } 42 }
39 43
40 P2PTransportImpl::~P2PTransportImpl() { 44 P2PTransportImpl::~P2PTransportImpl() {
41 } 45 }
42 46
43 bool P2PTransportImpl::Init(const std::string& name, 47 bool P2PTransportImpl::Init(const std::string& name,
44 Protocol protocol, 48 Protocol protocol,
45 const Config& config, 49 const Config& config,
46 EventHandler* event_handler) { 50 EventHandler* event_handler) {
47 DCHECK(event_handler); 51 DCHECK(event_handler);
48 52
49 // Before proceeding, ensure we have libjingle thread wrapper for 53 // Before proceeding, ensure we have libjingle thread wrapper for
50 // the current thread. 54 // the current thread.
51 jingle_glue::JingleThreadWrapper::EnsureForCurrentThread(); 55 jingle_glue::JingleThreadWrapper::EnsureForCurrentThread();
52 56
53 name_ = name; 57 name_ = name;
54 event_handler_ = event_handler; 58 event_handler_ = event_handler;
55 59
56 // TODO(sergeyu): Use STUN/Relay settings from |config|. 60 if (socket_dispatcher_) {
57 allocator_.reset(new cricket::BasicPortAllocator( 61 allocator_.reset(new P2PPortAllocator(
58 network_manager_.get(), socket_factory_.get())); 62 socket_dispatcher_, network_manager_.get(),
63 socket_factory_.get(), config));
64 } else {
65 // Use raw basic port allocator is used for tests.
Wez 2011/08/29 18:01:57 This comment needs rewording, although it could ju
Sergey Ulanov 2011/08/29 22:13:39 I think it's useful to have this comment here.
66 allocator_.reset(new cricket::BasicPortAllocator(
67 network_manager_.get(), socket_factory_.get()));
68 }
59 69
60 DCHECK(!channel_.get()); 70 DCHECK(!channel_.get());
61 channel_.reset(new cricket::P2PTransportChannel( 71 channel_.reset(new cricket::P2PTransportChannel(
62 name, "", NULL, allocator_.get())); 72 name, "", NULL, allocator_.get()));
63 channel_->SignalRequestSignaling.connect( 73 channel_->SignalRequestSignaling.connect(
64 this, &P2PTransportImpl::OnRequestSignaling); 74 this, &P2PTransportImpl::OnRequestSignaling);
65 channel_->SignalCandidateReady.connect( 75 channel_->SignalCandidateReady.connect(
66 this, &P2PTransportImpl::OnCandidateReady); 76 this, &P2PTransportImpl::OnCandidateReady);
67 77
68 if (protocol == PROTOCOL_UDP) { 78 if (protocol == PROTOCOL_UDP) {
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 void P2PTransportImpl::OnTcpConnected(int result) { 143 void P2PTransportImpl::OnTcpConnected(int result) {
134 if (result < 0) { 144 if (result < 0) {
135 event_handler_->OnError(result); 145 event_handler_->OnError(result);
136 return; 146 return;
137 } 147 }
138 state_ = static_cast<State>(STATE_READABLE | STATE_WRITABLE); 148 state_ = static_cast<State>(STATE_READABLE | STATE_WRITABLE);
139 event_handler_->OnStateChange(state_); 149 event_handler_->OnStateChange(state_);
140 } 150 }
141 151
142 } // namespace content 152 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698