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 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
183 DCHECK(!candidate_config_.get()); | 184 DCHECK(!candidate_config_.get()); |
184 DCHECK(candidate_config); | 185 DCHECK(candidate_config); |
185 candidate_config_.reset(candidate_config); | 186 candidate_config_.reset(candidate_config); |
186 } | 187 } |
187 | 188 |
188 const std::string& JingleSession::local_certificate() const { | 189 const std::string& JingleSession::local_certificate() const { |
189 DCHECK(CalledOnValidThread()); | 190 DCHECK(CalledOnValidThread()); |
190 return local_cert_; | 191 return local_cert_; |
191 } | 192 } |
192 | 193 |
193 const SessionConfig* JingleSession::config() { | 194 const SessionConfig& JingleSession::config() { |
194 // TODO(sergeyu): Fix ChromotingHost so that it doesn't call this | 195 // TODO(sergeyu): Fix ChromotingHost so that it doesn't call this |
195 // method on invalid thread and uncomment this DCHECK. | 196 // method on invalid thread and uncomment this DCHECK. |
196 // See crbug.com/88600 . | 197 // See crbug.com/88600 . |
197 // DCHECK(CalledOnValidThread()); | 198 // DCHECK(CalledOnValidThread()); |
198 DCHECK(config_.get()); | 199 DCHECK(config_set_); |
199 return config_.get(); | 200 return config_; |
200 } | 201 } |
201 | 202 |
202 void JingleSession::set_config(const SessionConfig* config) { | 203 void JingleSession::set_config(const SessionConfig& config) { |
203 DCHECK(CalledOnValidThread()); | 204 DCHECK(CalledOnValidThread()); |
204 DCHECK(!config_.get()); | 205 DCHECK(!config_set_); |
205 DCHECK(config); | 206 config_ = config; |
206 config_.reset(config); | 207 config_set_ = true; |
207 } | 208 } |
208 | 209 |
209 const std::string& JingleSession::initiator_token() { | 210 const std::string& JingleSession::initiator_token() { |
210 DCHECK(CalledOnValidThread()); | 211 DCHECK(CalledOnValidThread()); |
211 return initiator_token_; | 212 return initiator_token_; |
212 } | 213 } |
213 | 214 |
214 void JingleSession::set_initiator_token(const std::string& initiator_token) { | 215 void JingleSession::set_initiator_token(const std::string& initiator_token) { |
215 DCHECK(CalledOnValidThread()); | 216 DCHECK(CalledOnValidThread()); |
216 initiator_token_ = initiator_token; | 217 initiator_token_ = initiator_token; |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
332 const protocol::ContentDescription* content_description = | 333 const protocol::ContentDescription* content_description = |
333 static_cast<const protocol::ContentDescription*>(content->description); | 334 static_cast<const protocol::ContentDescription*>(content->description); |
334 CHECK(content_description); | 335 CHECK(content_description); |
335 | 336 |
336 remote_cert_ = content_description->certificate(); | 337 remote_cert_ = content_description->certificate(); |
337 if (remote_cert_.empty()) { | 338 if (remote_cert_.empty()) { |
338 LOG(ERROR) << "Connection response does not specify certificate"; | 339 LOG(ERROR) << "Connection response does not specify certificate"; |
339 return false; | 340 return false; |
340 } | 341 } |
341 | 342 |
342 scoped_ptr<SessionConfig> config( | 343 SessionConfig config; |
343 content_description->config()->GetFinalConfig()); | 344 if (!content_description->config()->GetFinalConfig(&config)) { |
344 if (!config.get()) { | |
345 LOG(ERROR) << "Connection response does not specify configuration"; | 345 LOG(ERROR) << "Connection response does not specify configuration"; |
346 return false; | 346 return false; |
347 } | 347 } |
348 if (!candidate_config()->IsSupported(config.get())) { | 348 if (!candidate_config()->IsSupported(config)) { |
349 LOG(ERROR) << "Connection response specifies an invalid configuration"; | 349 LOG(ERROR) << "Connection response specifies an invalid configuration"; |
350 return false; | 350 return false; |
351 } | 351 } |
352 | 352 |
353 set_config(config.release()); | 353 set_config(config); |
354 return true; | 354 return true; |
355 } | 355 } |
356 | 356 |
357 void JingleSession::OnAccept() { | 357 void JingleSession::OnAccept() { |
358 DCHECK(CalledOnValidThread()); | 358 DCHECK(CalledOnValidThread()); |
359 | 359 |
360 // If we initiated the session, store the candidate configuration that the | 360 // If we initiated the session, store the candidate configuration that the |
361 // host responded with, to refer to later. | 361 // host responded with, to refer to later. |
362 if (cricket_session_->initiator()) { | 362 if (cricket_session_->initiator()) { |
363 if (!InitializeConfigFromDescription( | 363 if (!InitializeConfigFromDescription( |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
472 DCHECK_NE(state_, FAILED); | 472 DCHECK_NE(state_, FAILED); |
473 | 473 |
474 state_ = new_state; | 474 state_ = new_state; |
475 if (state_change_callback_.get()) | 475 if (state_change_callback_.get()) |
476 state_change_callback_->Run(new_state); | 476 state_change_callback_->Run(new_state); |
477 } | 477 } |
478 } | 478 } |
479 | 479 |
480 } // namespace protocol | 480 } // namespace protocol |
481 } // namespace remoting | 481 } // namespace remoting |
OLD | NEW |