Index: remoting/protocol/jingle_session.cc |
diff --git a/remoting/protocol/jingle_session.cc b/remoting/protocol/jingle_session.cc |
index e6eb1e8a9b28da968d90ca2c9e435b9921669234..727be4b073c2845f47c03f802154a9ee34b05ec6 100644 |
--- a/remoting/protocol/jingle_session.cc |
+++ b/remoting/protocol/jingle_session.cc |
@@ -18,10 +18,7 @@ |
#include "remoting/protocol/content_description.h" |
#include "remoting/protocol/jingle_messages.h" |
#include "remoting/protocol/jingle_session_manager.h" |
-#include "remoting/protocol/pseudotcp_channel_factory.h" |
-#include "remoting/protocol/secure_channel_factory.h" |
#include "remoting/protocol/session_config.h" |
-#include "remoting/protocol/stream_channel_factory.h" |
#include "remoting/signaling/iq_sender.h" |
#include "third_party/libjingle/source/talk/p2p/base/candidate.h" |
#include "third_party/webrtc/libjingle/xmllite/xmlelement.h" |
@@ -84,7 +81,7 @@ |
pending_requests_.end()); |
STLDeleteContainerPointers(transport_info_requests_.begin(), |
transport_info_requests_.end()); |
- DCHECK(channels_.empty()); |
+ STLDeleteContainerPairSecondPointers(channels_.begin(), channels_.end()); |
session_manager_->SessionDestroyed(this); |
} |
@@ -190,7 +187,7 @@ |
SetState(CONNECTED); |
if (authenticator_->state() == Authenticator::ACCEPTED) { |
- OnAuthenticated(); |
+ SetState(AUTHENTICATED); |
} else { |
DCHECK_EQ(authenticator_->state(), Authenticator::WAITING_MESSAGE); |
if (authenticator_->started()) { |
@@ -221,17 +218,15 @@ |
config_is_set_ = true; |
} |
-StreamChannelFactory* JingleSession::GetTransportChannelFactory() { |
- DCHECK(CalledOnValidThread()); |
- return secure_channel_factory_.get(); |
-} |
- |
-StreamChannelFactory* JingleSession::GetMultiplexedChannelFactory() { |
- DCHECK(CalledOnValidThread()); |
- if (!channel_multiplexer_.get()) { |
- channel_multiplexer_.reset( |
- new ChannelMultiplexer(GetTransportChannelFactory(), kMuxChannelName)); |
- } |
+ChannelFactory* JingleSession::GetTransportChannelFactory() { |
+ DCHECK(CalledOnValidThread()); |
+ return this; |
+} |
+ |
+ChannelFactory* JingleSession::GetMultiplexedChannelFactory() { |
+ DCHECK(CalledOnValidThread()); |
+ if (!channel_multiplexer_.get()) |
+ channel_multiplexer_.reset(new ChannelMultiplexer(this, kMuxChannelName)); |
return channel_multiplexer_.get(); |
} |
@@ -259,17 +254,19 @@ |
const ChannelCreatedCallback& callback) { |
DCHECK(!channels_[name]); |
- scoped_ptr<Transport> channel = |
- session_manager_->transport_factory_->CreateTransport(); |
- channel->Connect(name, this, callback); |
+ scoped_ptr<ChannelAuthenticator> channel_authenticator = |
+ authenticator_->CreateChannelAuthenticator(); |
+ scoped_ptr<StreamTransport> channel = |
+ session_manager_->transport_factory_->CreateStreamTransport(); |
+ channel->Initialize(name, this, channel_authenticator.Pass()); |
+ channel->Connect(callback); |
AddPendingRemoteCandidates(channel.get(), name); |
channels_[name] = channel.release(); |
} |
void JingleSession::CancelChannelCreation(const std::string& name) { |
ChannelsMap::iterator it = channels_.find(name); |
- if (it != channels_.end()) { |
- DCHECK(!it->second->is_connected()); |
+ if (it != channels_.end() && !it->second->is_connected()) { |
delete it->second; |
DCHECK(!channels_[name]); |
} |
@@ -601,20 +598,11 @@ |
void JingleSession::ContinueAuthenticationStep() { |
if (authenticator_->state() == Authenticator::ACCEPTED) { |
- OnAuthenticated(); |
+ SetState(AUTHENTICATED); |
} else if (authenticator_->state() == Authenticator::REJECTED) { |
CloseInternal(AuthRejectionReasonToErrorCode( |
authenticator_->rejection_reason())); |
} |
-} |
- |
-void JingleSession::OnAuthenticated() { |
- pseudotcp_channel_factory_.reset(new PseudoTcpChannelFactory(this)); |
- secure_channel_factory_.reset( |
- new SecureChannelFactory(pseudotcp_channel_factory_.get(), |
- authenticator_.get())); |
- |
- SetState(AUTHENTICATED); |
} |
void JingleSession::CloseInternal(ErrorCode error) { |