| OLD | NEW |
| 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 "remoting/protocol/jingle_session.h" | 5 #include "remoting/protocol/jingle_session.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/message_loop_proxy.h" | 8 #include "base/message_loop_proxy.h" |
| 9 #include "base/rand_util.h" | 9 #include "base/rand_util.h" |
| 10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 50 JingleSession::JingleSession( | 50 JingleSession::JingleSession( |
| 51 JingleSessionManager* jingle_session_manager, | 51 JingleSessionManager* jingle_session_manager, |
| 52 const std::string& local_cert, | 52 const std::string& local_cert, |
| 53 crypto::RSAPrivateKey* local_private_key, | 53 crypto::RSAPrivateKey* local_private_key, |
| 54 const std::string& peer_public_key) | 54 const std::string& peer_public_key) |
| 55 : jingle_session_manager_(jingle_session_manager), | 55 : jingle_session_manager_(jingle_session_manager), |
| 56 local_cert_(local_cert), | 56 local_cert_(local_cert), |
| 57 state_(INITIALIZING), | 57 state_(INITIALIZING), |
| 58 closing_(false), | 58 closing_(false), |
| 59 cricket_session_(NULL), | 59 cricket_session_(NULL), |
| 60 config_set_(false), |
| 60 ALLOW_THIS_IN_INITIALIZER_LIST(task_factory_(this)) { | 61 ALLOW_THIS_IN_INITIALIZER_LIST(task_factory_(this)) { |
| 61 // TODO(hclam): Need a better way to clone a key. | 62 // TODO(hclam): Need a better way to clone a key. |
| 62 if (local_private_key) { | 63 if (local_private_key) { |
| 63 std::vector<uint8> key_bytes; | 64 std::vector<uint8> key_bytes; |
| 64 CHECK(local_private_key->ExportPrivateKey(&key_bytes)); | 65 CHECK(local_private_key->ExportPrivateKey(&key_bytes)); |
| 65 local_private_key_.reset( | 66 local_private_key_.reset( |
| 66 crypto::RSAPrivateKey::CreateFromPrivateKeyInfo(key_bytes)); | 67 crypto::RSAPrivateKey::CreateFromPrivateKeyInfo(key_bytes)); |
| 67 CHECK(local_private_key_.get()); | 68 CHECK(local_private_key_.get()); |
| 68 } | 69 } |
| 69 } | 70 } |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 157 DCHECK(CalledOnValidThread()); | 158 DCHECK(CalledOnValidThread()); |
| 158 return control_channel_socket_.get(); | 159 return control_channel_socket_.get(); |
| 159 } | 160 } |
| 160 | 161 |
| 161 net::Socket* JingleSession::event_channel() { | 162 net::Socket* JingleSession::event_channel() { |
| 162 DCHECK(CalledOnValidThread()); | 163 DCHECK(CalledOnValidThread()); |
| 163 return event_channel_socket_.get(); | 164 return event_channel_socket_.get(); |
| 164 } | 165 } |
| 165 | 166 |
| 166 const std::string& JingleSession::jid() { | 167 const std::string& JingleSession::jid() { |
| 167 // TODO(sergeyu): Fix ChromotingHost so that it doesn't call this | 168 DCHECK(CalledOnValidThread()); |
| 168 // method on invalid thread and uncomment this DCHECK. | |
| 169 // See crbug.com/88600 . | |
| 170 // DCHECK(CalledOnValidThread()); | |
| 171 return jid_; | 169 return jid_; |
| 172 } | 170 } |
| 173 | 171 |
| 174 const CandidateSessionConfig* JingleSession::candidate_config() { | 172 const CandidateSessionConfig* JingleSession::candidate_config() { |
| 175 DCHECK(CalledOnValidThread()); | 173 DCHECK(CalledOnValidThread()); |
| 176 DCHECK(candidate_config_.get()); | 174 DCHECK(candidate_config_.get()); |
| 177 return candidate_config_.get(); | 175 return candidate_config_.get(); |
| 178 } | 176 } |
| 179 | 177 |
| 180 void JingleSession::set_candidate_config( | 178 void JingleSession::set_candidate_config( |
| 181 const CandidateSessionConfig* candidate_config) { | 179 const CandidateSessionConfig* candidate_config) { |
| 182 DCHECK(CalledOnValidThread()); | 180 DCHECK(CalledOnValidThread()); |
| 183 DCHECK(!candidate_config_.get()); | 181 DCHECK(!candidate_config_.get()); |
| 184 DCHECK(candidate_config); | 182 DCHECK(candidate_config); |
| 185 candidate_config_.reset(candidate_config); | 183 candidate_config_.reset(candidate_config); |
| 186 } | 184 } |
| 187 | 185 |
| 188 const std::string& JingleSession::local_certificate() const { | 186 const std::string& JingleSession::local_certificate() const { |
| 189 DCHECK(CalledOnValidThread()); | 187 DCHECK(CalledOnValidThread()); |
| 190 return local_cert_; | 188 return local_cert_; |
| 191 } | 189 } |
| 192 | 190 |
| 193 const SessionConfig* JingleSession::config() { | 191 const SessionConfig& JingleSession::config() { |
| 194 // TODO(sergeyu): Fix ChromotingHost so that it doesn't call this | 192 DCHECK(CalledOnValidThread()); |
| 195 // method on invalid thread and uncomment this DCHECK. | 193 DCHECK(config_set_); |
| 196 // See crbug.com/88600 . | 194 return config_; |
| 197 // DCHECK(CalledOnValidThread()); | |
| 198 DCHECK(config_.get()); | |
| 199 return config_.get(); | |
| 200 } | 195 } |
| 201 | 196 |
| 202 void JingleSession::set_config(const SessionConfig* config) { | 197 void JingleSession::set_config(const SessionConfig& config) { |
| 203 DCHECK(CalledOnValidThread()); | 198 DCHECK(CalledOnValidThread()); |
| 204 DCHECK(!config_.get()); | 199 DCHECK(!config_set_); |
| 205 DCHECK(config); | 200 config_ = config; |
| 206 config_.reset(config); | 201 config_set_ = true; |
| 207 } | 202 } |
| 208 | 203 |
| 209 const std::string& JingleSession::initiator_token() { | 204 const std::string& JingleSession::initiator_token() { |
| 210 DCHECK(CalledOnValidThread()); | 205 DCHECK(CalledOnValidThread()); |
| 211 return initiator_token_; | 206 return initiator_token_; |
| 212 } | 207 } |
| 213 | 208 |
| 214 void JingleSession::set_initiator_token(const std::string& initiator_token) { | 209 void JingleSession::set_initiator_token(const std::string& initiator_token) { |
| 215 DCHECK(CalledOnValidThread()); | 210 DCHECK(CalledOnValidThread()); |
| 216 initiator_token_ = initiator_token; | 211 initiator_token_ = initiator_token; |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 332 const protocol::ContentDescription* content_description = | 327 const protocol::ContentDescription* content_description = |
| 333 static_cast<const protocol::ContentDescription*>(content->description); | 328 static_cast<const protocol::ContentDescription*>(content->description); |
| 334 CHECK(content_description); | 329 CHECK(content_description); |
| 335 | 330 |
| 336 remote_cert_ = content_description->certificate(); | 331 remote_cert_ = content_description->certificate(); |
| 337 if (remote_cert_.empty()) { | 332 if (remote_cert_.empty()) { |
| 338 LOG(ERROR) << "Connection response does not specify certificate"; | 333 LOG(ERROR) << "Connection response does not specify certificate"; |
| 339 return false; | 334 return false; |
| 340 } | 335 } |
| 341 | 336 |
| 342 scoped_ptr<SessionConfig> config( | 337 SessionConfig config; |
| 343 content_description->config()->GetFinalConfig()); | 338 if (!content_description->config()->GetFinalConfig(&config)) { |
| 344 if (!config.get()) { | |
| 345 LOG(ERROR) << "Connection response does not specify configuration"; | 339 LOG(ERROR) << "Connection response does not specify configuration"; |
| 346 return false; | 340 return false; |
| 347 } | 341 } |
| 348 if (!candidate_config()->IsSupported(config.get())) { | 342 if (!candidate_config()->IsSupported(config)) { |
| 349 LOG(ERROR) << "Connection response specifies an invalid configuration"; | 343 LOG(ERROR) << "Connection response specifies an invalid configuration"; |
| 350 return false; | 344 return false; |
| 351 } | 345 } |
| 352 | 346 |
| 353 set_config(config.release()); | 347 set_config(config); |
| 354 return true; | 348 return true; |
| 355 } | 349 } |
| 356 | 350 |
| 357 void JingleSession::OnAccept() { | 351 void JingleSession::OnAccept() { |
| 358 DCHECK(CalledOnValidThread()); | 352 DCHECK(CalledOnValidThread()); |
| 359 | 353 |
| 360 // If we initiated the session, store the candidate configuration that the | 354 // If we initiated the session, store the candidate configuration that the |
| 361 // host responded with, to refer to later. | 355 // host responded with, to refer to later. |
| 362 if (cricket_session_->initiator()) { | 356 if (cricket_session_->initiator()) { |
| 363 if (!InitializeConfigFromDescription( | 357 if (!InitializeConfigFromDescription( |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 472 DCHECK_NE(state_, FAILED); | 466 DCHECK_NE(state_, FAILED); |
| 473 | 467 |
| 474 state_ = new_state; | 468 state_ = new_state; |
| 475 if (state_change_callback_.get()) | 469 if (state_change_callback_.get()) |
| 476 state_change_callback_->Run(new_state); | 470 state_change_callback_->Run(new_state); |
| 477 } | 471 } |
| 478 } | 472 } |
| 479 | 473 |
| 480 } // namespace protocol | 474 } // namespace protocol |
| 481 } // namespace remoting | 475 } // namespace remoting |
| OLD | NEW |