Index: remoting/protocol/libjingle_transport_factory.cc |
diff --git a/remoting/protocol/libjingle_transport_factory.cc b/remoting/protocol/libjingle_transport_factory.cc |
index 189757dd35565cb0e8d98b98db1cbb26eb7f1ce9..02d0d97e5b619e2e9bce64878529f9791fa1e142 100644 |
--- a/remoting/protocol/libjingle_transport_factory.cc |
+++ b/remoting/protocol/libjingle_transport_factory.cc |
@@ -15,7 +15,7 @@ |
#include "third_party/libjingle/source/talk/base/basicpacketsocketfactory.h" |
#include "third_party/libjingle/source/talk/base/network.h" |
#include "third_party/libjingle/source/talk/p2p/base/p2ptransportchannel.h" |
-#include "third_party/libjingle/source/talk/p2p/client/httpportallocator.h" |
+#include "third_party/libjingle/source/talk/p2p/client/basicportallocator.h" |
namespace remoting { |
namespace protocol { |
@@ -34,8 +34,8 @@ const int kTcpSendBufferSize = kTcpReceiveBufferSize + 30 * 1024; |
class LibjingleStreamTransport : public StreamTransport, |
public sigslot::has_slots<> { |
public: |
- LibjingleStreamTransport(talk_base::NetworkManager* network_manager, |
- talk_base::PacketSocketFactory* socket_factory); |
+ LibjingleStreamTransport(cricket::PortAllocator* port_allocator, |
+ bool incoming_only); |
virtual ~LibjingleStreamTransport(); |
// StreamTransport interface. |
@@ -66,8 +66,8 @@ class LibjingleStreamTransport : public StreamTransport, |
void NotifyConnected(scoped_ptr<net::StreamSocket> socket); |
void NotifyConnectFailed(); |
- talk_base::NetworkManager* network_manager_; |
- talk_base::PacketSocketFactory* socket_factory_; |
+ cricket::PortAllocator* port_allocator_; |
Wez
2012/04/27 17:58:51
So the LibjingleTransportFactory now owns the Port
Sergey Ulanov
2012/04/27 22:51:14
No. Don't think we need it - it would crash it qui
|
+ bool incoming_only_; |
std::string name_; |
TransportConfig config_; |
@@ -75,8 +75,6 @@ class LibjingleStreamTransport : public StreamTransport, |
StreamTransport::ConnectedCallback callback_; |
scoped_ptr<ChannelAuthenticator> authenticator_; |
- scoped_ptr<cricket::PortAllocator> port_allocator_; |
- cricket::HttpPortAllocator* http_port_allocator_; |
scoped_ptr<cricket::P2PTransportChannel> channel_; |
// We own |socket_| until it is connected. |
@@ -86,12 +84,11 @@ class LibjingleStreamTransport : public StreamTransport, |
}; |
LibjingleStreamTransport::LibjingleStreamTransport( |
- talk_base::NetworkManager* network_manager, |
- talk_base::PacketSocketFactory* socket_factory) |
- : network_manager_(network_manager), |
- socket_factory_(socket_factory), |
- event_handler_(NULL), |
- http_port_allocator_(NULL) { |
+ cricket::PortAllocator* port_allocator, |
+ bool incoming_only) |
+ : port_allocator_(port_allocator), |
+ incoming_only_(incoming_only), |
+ event_handler_(NULL) { |
} |
LibjingleStreamTransport::~LibjingleStreamTransport() { |
@@ -104,10 +101,6 @@ LibjingleStreamTransport::~LibjingleStreamTransport() { |
base::MessageLoopProxy::current()->DeleteSoon( |
FROM_HERE, channel_.release()); |
} |
- if (port_allocator_.get()) { |
- base::MessageLoopProxy::current()->DeleteSoon( |
- FROM_HERE, port_allocator_.release()); |
- } |
} |
void LibjingleStreamTransport::Initialize( |
@@ -135,40 +128,19 @@ void LibjingleStreamTransport::Connect( |
callback_ = callback; |
- // Create port allocator first. |
- |
- // We always use PseudoTcp to provide a reliable channel. However |
- // when it is used together with TCP the performance is very bad |
- // so we explicitly disable TCP connections. |
- int port_allocator_flags = cricket::PORTALLOCATOR_DISABLE_TCP; |
- if (config_.nat_traversal_mode == TransportConfig::NAT_TRAVERSAL_ENABLED) { |
- http_port_allocator_ = new cricket::HttpPortAllocator( |
- network_manager_, socket_factory_, ""); |
- port_allocator_.reset(http_port_allocator_); |
- } else { |
- port_allocator_flags |= cricket::PORTALLOCATOR_DISABLE_STUN | |
- cricket::PORTALLOCATOR_DISABLE_RELAY; |
- port_allocator_.reset( |
- new cricket::BasicPortAllocator(network_manager_, socket_factory_)); |
- } |
- port_allocator_->set_flags(port_allocator_flags); |
- |
- port_allocator_->SetPortRange(config_.min_port, config_.max_port); |
- |
DCHECK(!channel_.get()); |
// Create P2PTransportChannel, attach signal handlers and connect it. |
// TODO(sergeyu): Specify correct component ID for the channel. |
channel_.reset(new cricket::P2PTransportChannel( |
- name_, 0, NULL, port_allocator_.get())); |
+ name_, 0, NULL, port_allocator_)); |
channel_->SignalRequestSignaling.connect( |
this, &LibjingleStreamTransport::OnRequestSignaling); |
channel_->SignalCandidateReady.connect( |
this, &LibjingleStreamTransport::OnCandidateReady); |
channel_->SignalRouteChange.connect( |
this, &LibjingleStreamTransport::OnRouteChange); |
- if (config_.nat_traversal_mode == TransportConfig::NAT_TRAVERSAL_DISABLED) |
- channel_->set_incoming_only(true); |
+ channel_->set_incoming_only(incoming_only_); |
channel_->Connect(); |
@@ -311,10 +283,6 @@ void LibjingleStreamTransport::NotifyConnectFailed() { |
base::MessageLoopProxy::current()->DeleteSoon( |
FROM_HERE, channel_.release()); |
} |
- if (port_allocator_.get()) { |
- base::MessageLoopProxy::current()->DeleteSoon( |
- FROM_HERE, port_allocator_.release()); |
- } |
authenticator_.reset(); |
@@ -323,16 +291,30 @@ void LibjingleStreamTransport::NotifyConnectFailed() { |
} // namespace |
+LibjingleTransportFactory::LibjingleTransportFactory( |
+ scoped_ptr<talk_base::NetworkManager> network_manager, |
+ scoped_ptr<talk_base::PacketSocketFactory> socket_factory, |
+ scoped_ptr<cricket::PortAllocator> port_allocator, |
+ bool incoming_only) |
+ : network_manager_(network_manager.Pass()), |
+ socket_factory_(socket_factory.Pass()), |
+ port_allocator_(port_allocator.Pass()), |
+ incoming_only_(incoming_only) { |
+} |
+ |
LibjingleTransportFactory::LibjingleTransportFactory() |
: network_manager_(new talk_base::BasicNetworkManager()), |
- socket_factory_(new talk_base::BasicPacketSocketFactory( |
- talk_base::Thread::Current())) { |
+ socket_factory_(new talk_base::BasicPacketSocketFactory()), |
+ port_allocator_(new cricket::BasicPortAllocator( |
+ network_manager_.get(), socket_factory_.get())) { |
} |
LibjingleTransportFactory::~LibjingleTransportFactory() { |
// This method may be called in response to a libjingle signal, so |
// libjingle objects must be deleted asynchronously. |
base::MessageLoopProxy::current()->DeleteSoon( |
+ FROM_HERE, port_allocator_.release()); |
+ base::MessageLoopProxy::current()->DeleteSoon( |
FROM_HERE, socket_factory_.release()); |
base::MessageLoopProxy::current()->DeleteSoon( |
FROM_HERE, network_manager_.release()); |
@@ -340,8 +322,7 @@ LibjingleTransportFactory::~LibjingleTransportFactory() { |
scoped_ptr<StreamTransport> LibjingleTransportFactory::CreateStreamTransport() { |
return scoped_ptr<StreamTransport>( |
- new LibjingleStreamTransport(network_manager_.get(), |
- socket_factory_.get())); |
+ new LibjingleStreamTransport(port_allocator_.get(), incoming_only_)); |
} |
scoped_ptr<DatagramTransport> |