| Index: remoting/protocol/jingle_session_manager.cc
|
| diff --git a/remoting/protocol/jingle_session_manager.cc b/remoting/protocol/jingle_session_manager.cc
|
| index 96c95b1e336be05537a036933d78d95046d5ffef..6a94a44b7d1124fe14a07657e4f6bf296ea9361b 100644
|
| --- a/remoting/protocol/jingle_session_manager.cc
|
| +++ b/remoting/protocol/jingle_session_manager.cc
|
| @@ -33,6 +33,7 @@ JingleSessionManager::JingleSessionManager(
|
| : message_loop_(message_loop),
|
| signal_strategy_(NULL),
|
| allow_nat_traversal_(false),
|
| + ready_(false),
|
| http_port_allocator_(NULL),
|
| closed_(false),
|
| ALLOW_THIS_IN_INITIALIZER_LIST(task_factory_(this)) {
|
| @@ -45,20 +46,20 @@ JingleSessionManager::~JingleSessionManager() {
|
| }
|
|
|
| void JingleSessionManager::Init(
|
| - const std::string& local_jid,
|
| SignalStrategy* signal_strategy,
|
| - Listener* listener,
|
| + SessionManager::Listener* listener,
|
| bool allow_nat_traversal) {
|
| DCHECK(CalledOnValidThread());
|
|
|
| DCHECK(signal_strategy);
|
| DCHECK(listener);
|
|
|
| - local_jid_ = local_jid;
|
| signal_strategy_ = signal_strategy;
|
| listener_ = listener;
|
| allow_nat_traversal_ = allow_nat_traversal;
|
|
|
| + signal_strategy_->AddListener(this);
|
| +
|
| if (!network_manager_.get()) {
|
| VLOG(1) << "Creating talk_base::NetworkManager.";
|
| network_manager_.reset(new talk_base::BasicNetworkManager());
|
| @@ -97,14 +98,7 @@ void JingleSessionManager::Init(
|
| jingle_signaling_connector_.reset(new JingleSignalingConnector(
|
| signal_strategy_, cricket_session_manager_.get()));
|
|
|
| - // If NAT traversal is enabled then we need to request STUN/Relay info.
|
| - if (allow_nat_traversal) {
|
| - jingle_info_request_.reset(new JingleInfoRequest(signal_strategy_));
|
| - jingle_info_request_->Send(base::Bind(
|
| - &JingleSessionManager::OnJingleInfo, base::Unretained(this)));
|
| - } else {
|
| - listener_->OnSessionManagerInitialized();
|
| - }
|
| + OnSignalStrategyStateChange(signal_strategy_->GetState());
|
| }
|
|
|
| void JingleSessionManager::Close() {
|
| @@ -114,6 +108,7 @@ void JingleSessionManager::Close() {
|
| jingle_info_request_.reset();
|
| cricket_session_manager_->RemoveClient(kChromotingXmlNamespace);
|
| jingle_signaling_connector_.reset();
|
| + signal_strategy_->RemoveListener(this);
|
| closed_ = true;
|
| }
|
| }
|
| @@ -132,7 +127,7 @@ Session* JingleSessionManager::Connect(
|
| DCHECK(CalledOnValidThread());
|
|
|
| cricket::Session* cricket_session = cricket_session_manager_->CreateSession(
|
| - local_jid_, kChromotingXmlNamespace);
|
| + signal_strategy_->GetLocalJid(), kChromotingXmlNamespace);
|
| cricket_session->set_remote_name(host_jid);
|
|
|
| JingleSession* jingle_session =
|
| @@ -172,6 +167,21 @@ void JingleSessionManager::OnSessionDestroy(cricket::Session* cricket_session) {
|
| }
|
| }
|
|
|
| +void JingleSessionManager::OnSignalStrategyStateChange(
|
| + SignalStrategy::State state) {
|
| + if (state == SignalStrategy::CONNECTED) {
|
| + // If NAT traversal is enabled then we need to request STUN/Relay info.
|
| + if (allow_nat_traversal_) {
|
| + jingle_info_request_.reset(new JingleInfoRequest(signal_strategy_));
|
| + jingle_info_request_->Send(base::Bind(
|
| + &JingleSessionManager::OnJingleInfo, base::Unretained(this)));
|
| + } else if (!ready_) {
|
| + ready_ = true;
|
| + listener_->OnSessionManagerReady();
|
| + }
|
| + }
|
| +}
|
| +
|
| SessionManager::IncomingSessionResponse JingleSessionManager::AcceptConnection(
|
| JingleSession* jingle_session) {
|
| DCHECK(CalledOnValidThread());
|
| @@ -225,7 +235,10 @@ void JingleSessionManager::OnJingleInfo(
|
| LOG(WARNING) << "Jingle info found but no port allocator.";
|
| }
|
|
|
| - listener_->OnSessionManagerInitialized();
|
| + if (!ready_) {
|
| + ready_ = true;
|
| + listener_->OnSessionManagerReady();
|
| + }
|
| }
|
|
|
| // Parse content description generated by WriteContent().
|
|
|