| Index: remoting/protocol/ice_transport_session.cc
|
| diff --git a/remoting/protocol/ice_transport_session.cc b/remoting/protocol/ice_transport_session.cc
|
| index f87e65534b5dd1671f34daeb981d606ed98c09ec..89f854a3c3951152dd504cab9eef8aaba817aa9d 100644
|
| --- a/remoting/protocol/ice_transport_session.cc
|
| +++ b/remoting/protocol/ice_transport_session.cc
|
| @@ -4,9 +4,9 @@
|
|
|
| #include "remoting/protocol/ice_transport_session.h"
|
|
|
| +#include "base/bind.h"
|
| #include "remoting/protocol/channel_authenticator.h"
|
| #include "remoting/protocol/channel_multiplexer.h"
|
| -#include "remoting/protocol/libjingle_transport_factory.h"
|
| #include "remoting/protocol/pseudotcp_channel_factory.h"
|
| #include "remoting/protocol/secure_channel_factory.h"
|
| #include "remoting/protocol/stream_channel_factory.h"
|
| @@ -23,16 +23,29 @@ const int kTransportInfoSendDelayMs = 20;
|
| static const char kMuxChannelName[] = "mux";
|
|
|
| IceTransportSession::IceTransportSession(
|
| - LibjingleTransportFactory* libjingle_transport_factory)
|
| - : libjingle_transport_factory_(libjingle_transport_factory) {}
|
| + cricket::PortAllocator* port_allocator,
|
| + const NetworkSettings& network_settings,
|
| + TransportRole role)
|
| + : port_allocator_(port_allocator),
|
| + network_settings_(network_settings),
|
| + role_(role),
|
| + weak_factory_(this) {}
|
|
|
| IceTransportSession::~IceTransportSession() {
|
| channel_multiplexer_.reset();
|
| DCHECK(channels_.empty());
|
| }
|
|
|
| +base::Closure IceTransportSession::GetCanStartClosure() {
|
| + return base::Bind(&IceTransportSession::OnCanStart,
|
| + weak_factory_.GetWeakPtr());
|
| +}
|
| +
|
| void IceTransportSession::Start(TransportSession::EventHandler* event_handler,
|
| Authenticator* authenticator) {
|
| + DCHECK(event_handler);
|
| + DCHECK(!event_handler_);
|
| +
|
| event_handler_ = event_handler;
|
| pseudotcp_channel_factory_.reset(new PseudoTcpChannelFactory(this));
|
| secure_channel_factory_.reset(new SecureChannelFactory(
|
| @@ -88,13 +101,25 @@ StreamChannelFactory* IceTransportSession::GetMultiplexedChannelFactory() {
|
| return channel_multiplexer_.get();
|
| }
|
|
|
| +void IceTransportSession::OnCanStart() {
|
| + DCHECK(!can_start_);
|
| +
|
| + can_start_ = true;
|
| + for (ChannelsMap::iterator it = channels_.begin(); it != channels_.end();
|
| + ++it) {
|
| + it->second->OnCanStart();
|
| + }
|
| +}
|
| +
|
| void IceTransportSession::CreateChannel(
|
| const std::string& name,
|
| const ChannelCreatedCallback& callback) {
|
| DCHECK(!channels_[name]);
|
|
|
| - scoped_ptr<Transport> channel =
|
| - libjingle_transport_factory_->CreateTransport();
|
| + scoped_ptr<IceTransportChannel> channel(
|
| + new IceTransportChannel(port_allocator_, network_settings_, role_));
|
| + if (can_start_)
|
| + channel->OnCanStart();
|
| channel->Connect(name, this, callback);
|
| AddPendingRemoteTransportInfo(channel.get());
|
| channels_[name] = channel.release();
|
| @@ -109,7 +134,8 @@ void IceTransportSession::CancelChannelCreation(const std::string& name) {
|
| }
|
| }
|
|
|
| -void IceTransportSession::AddPendingRemoteTransportInfo(Transport* channel) {
|
| +void IceTransportSession::AddPendingRemoteTransportInfo(
|
| + IceTransportChannel* channel) {
|
| std::list<IceTransportInfo::IceCredentials>::iterator credentials =
|
| pending_remote_ice_credentials_.begin();
|
| while (credentials != pending_remote_ice_credentials_.end()) {
|
| @@ -134,35 +160,35 @@ void IceTransportSession::AddPendingRemoteTransportInfo(Transport* channel) {
|
| }
|
|
|
| void IceTransportSession::OnTransportIceCredentials(
|
| - Transport* transport,
|
| + IceTransportChannel* channel,
|
| const std::string& ufrag,
|
| const std::string& password) {
|
| EnsurePendingTransportInfoMessage();
|
| pending_transport_info_message_->ice_credentials.push_back(
|
| - IceTransportInfo::IceCredentials(transport->name(), ufrag, password));
|
| + IceTransportInfo::IceCredentials(channel->name(), ufrag, password));
|
| }
|
|
|
| void IceTransportSession::OnTransportCandidate(
|
| - Transport* transport,
|
| + IceTransportChannel* channel,
|
| const cricket::Candidate& candidate) {
|
| EnsurePendingTransportInfoMessage();
|
| pending_transport_info_message_->candidates.push_back(
|
| - IceTransportInfo::NamedCandidate(transport->name(), candidate));
|
| + IceTransportInfo::NamedCandidate(channel->name(), candidate));
|
| }
|
|
|
| -void IceTransportSession::OnTransportRouteChange(Transport* transport,
|
| +void IceTransportSession::OnTransportRouteChange(IceTransportChannel* channel,
|
| const TransportRoute& route) {
|
| if (event_handler_)
|
| - event_handler_->OnTransportRouteChange(transport->name(), route);
|
| + event_handler_->OnTransportRouteChange(channel->name(), route);
|
| }
|
|
|
| -void IceTransportSession::OnTransportFailed(Transport* transport) {
|
| +void IceTransportSession::OnTransportFailed(IceTransportChannel* channel) {
|
| event_handler_->OnTransportError(CHANNEL_CONNECTION_ERROR);
|
| }
|
|
|
| -void IceTransportSession::OnTransportDeleted(Transport* transport) {
|
| - ChannelsMap::iterator it = channels_.find(transport->name());
|
| - DCHECK_EQ(it->second, transport);
|
| +void IceTransportSession::OnTransportDeleted(IceTransportChannel* channel) {
|
| + ChannelsMap::iterator it = channels_.find(channel->name());
|
| + DCHECK_EQ(it->second, channel);
|
| channels_.erase(it);
|
| }
|
|
|
|
|