Chromium Code Reviews| 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 <stdio.h> | 5 #include <stdio.h> |
| 6 #include <string.h> | 6 #include <string.h> |
| 7 | 7 |
| 8 #include <string> | 8 #include <string> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 304 int state_; | 304 int state_; |
| 305 std::string access_code_; | 305 std::string access_code_; |
| 306 NPObject* on_state_changed_func_; | 306 NPObject* on_state_changed_func_; |
| 307 base::AtExitManager exit_manager_; | 307 base::AtExitManager exit_manager_; |
| 308 base::PlatformThreadId np_thread_id_; | 308 base::PlatformThreadId np_thread_id_; |
| 309 | 309 |
| 310 scoped_refptr<remoting::RegisterSupportHostRequest> register_request_; | 310 scoped_refptr<remoting::RegisterSupportHostRequest> register_request_; |
| 311 scoped_refptr<remoting::ChromotingHost> host_; | 311 scoped_refptr<remoting::ChromotingHost> host_; |
| 312 scoped_refptr<remoting::MutableHostConfig> host_config_; | 312 scoped_refptr<remoting::MutableHostConfig> host_config_; |
| 313 remoting::ChromotingHostContext host_context_; | 313 remoting::ChromotingHostContext host_context_; |
| 314 std::string host_secret_; | 314 std::string host_secret_; |
|
Jamie
2011/05/20 20:18:02
Is this still needed now that the SupportAccessVer
Wez
2011/05/20 20:52:10
Done.
| |
| 315 | 315 |
| 316 // Start connection. args are: | 316 // Start connection. args are: |
| 317 // string uid, string auth_token | 317 // string uid, string auth_token |
| 318 // No result. | 318 // No result. |
| 319 bool Connect(const NPVariant* args, uint32_t argCount, NPVariant* result); | 319 bool Connect(const NPVariant* args, uint32_t argCount, NPVariant* result); |
| 320 | 320 |
| 321 // Disconnect. No arguments or result. | 321 // Disconnect. No arguments or result. |
| 322 bool Disconnect(const NPVariant* args, uint32_t argCount, NPVariant* result); | 322 bool Disconnect(const NPVariant* args, uint32_t argCount, NPVariant* result); |
| 323 | 323 |
| 324 // Call OnStateChanged handler if there is one. | 324 // Call OnStateChanged handler if there is one. |
| 325 void OnStateChanged(State state); | 325 void OnStateChanged(State state); |
| 326 | 326 |
| 327 // Currently just mock methods to verify that everything is working | 327 // Currently just mock methods to verify that everything is working |
|
Jamie
2011/05/20 20:18:02
Presumably this comment is no longer accurate?
Wez
2011/05/20 20:52:10
Done.
| |
| 328 void OnReceivedSupportID(bool success, const std::string& support_id); | 328 void OnReceivedSupportID(remoting::SupportAccessVerifier* access_verifier, |
| 329 bool success, | |
| 330 const std::string& support_id); | |
| 329 void OnConnected(); | 331 void OnConnected(); |
| 330 void OnHostShutdown(); | 332 void OnHostShutdown(); |
| 331 | 333 |
| 332 // Call a JavaScript function wrapped as an NPObject. | 334 // Call a JavaScript function wrapped as an NPObject. |
| 333 // If result is non-null, the result of the call will be stored in it. | 335 // If result is non-null, the result of the call will be stored in it. |
| 334 // Caller is responsible for releasing result if they ask for it. | 336 // Caller is responsible for releasing result if they ask for it. |
| 335 static bool CallJSFunction(NPObject* func, | 337 static bool CallJSFunction(NPObject* func, |
| 336 const NPVariant* args, | 338 const NPVariant* args, |
| 337 uint32_t argCount, | 339 uint32_t argCount, |
| 338 NPVariant* result); | 340 NPVariant* result); |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 400 return false; | 402 return false; |
| 401 } | 403 } |
| 402 host_secret_ = access_verifier->host_secret(); | 404 host_secret_ = access_verifier->host_secret(); |
| 403 | 405 |
| 404 // Generate a key pair for the Host to use. | 406 // Generate a key pair for the Host to use. |
| 405 // TODO(wez): Move this to the worker thread. | 407 // TODO(wez): Move this to the worker thread. |
| 406 remoting::HostKeyPair host_key_pair; | 408 remoting::HostKeyPair host_key_pair; |
| 407 host_key_pair.Generate(); | 409 host_key_pair.Generate(); |
| 408 host_key_pair.Save(host_config); | 410 host_key_pair.Save(host_config); |
| 409 | 411 |
| 410 // Create the Host. | |
| 411 scoped_refptr<remoting::ChromotingHost> host = | |
| 412 remoting::ChromotingHost::Create(&host_context_, host_config, | |
| 413 access_verifier.release()); | |
| 414 | |
| 415 // Request registration of the host for support. | 412 // Request registration of the host for support. |
| 416 scoped_refptr<remoting::RegisterSupportHostRequest> register_request = | 413 scoped_refptr<remoting::RegisterSupportHostRequest> register_request = |
| 417 new remoting::RegisterSupportHostRequest(); | 414 new remoting::RegisterSupportHostRequest(); |
| 418 if (!register_request->Init( | 415 if (!register_request->Init( |
| 419 host_config.get(), | 416 host_config.get(), |
| 420 base::Bind(&HostNPScriptObject::OnReceivedSupportID, | 417 base::Bind(&HostNPScriptObject::OnReceivedSupportID, |
| 421 base::Unretained(this)))) { | 418 base::Unretained(this), |
| 419 access_verifier.get()))) { | |
| 422 SetException("connect: RegisterSupportHostRequest::Init failed"); | 420 SetException("connect: RegisterSupportHostRequest::Init failed"); |
| 423 return false; | 421 return false; |
| 424 } | 422 } |
| 423 | |
| 424 // Create the Host. | |
| 425 scoped_refptr<remoting::ChromotingHost> host = | |
| 426 remoting::ChromotingHost::Create(&host_context_, host_config, | |
| 427 access_verifier.release()); | |
| 425 host->AddStatusObserver(register_request); | 428 host->AddStatusObserver(register_request); |
| 426 | 429 |
| 430 // TODO(wez): Improve our authentication framework. | |
| 431 host->set_preauthenticated(true); | |
| 432 | |
| 427 // Nothing went wrong, so lets save the host, config and request. | 433 // Nothing went wrong, so lets save the host, config and request. |
| 428 host_ = host; | 434 host_ = host; |
| 429 host_config_ = host_config; | 435 host_config_ = host_config; |
| 430 register_request_ = register_request; | 436 register_request_ = register_request; |
| 431 | 437 |
| 432 // Start the Host. | 438 // Start the Host. |
| 433 // TODO(wez): Attach to the Host for notifications of state changes. | 439 // TODO(wez): Attach to the Host for notifications of state changes. |
| 434 // It currently has no interface for that, though. | 440 // It currently has no interface for that, though. |
| 435 host_->Start(NewRunnableMethod(this, &HostNPScriptObject::OnHostShutdown)); | 441 host_->Start(NewRunnableMethod(this, &HostNPScriptObject::OnHostShutdown)); |
| 436 | 442 |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 452 host_ = NULL; | 458 host_ = NULL; |
| 453 } | 459 } |
| 454 register_request_ = NULL; | 460 register_request_ = NULL; |
| 455 host_config_ = NULL; | 461 host_config_ = NULL; |
| 456 host_secret_.clear(); | 462 host_secret_.clear(); |
| 457 | 463 |
| 458 OnStateChanged(kDisconnected); | 464 OnStateChanged(kDisconnected); |
| 459 return true; | 465 return true; |
| 460 } | 466 } |
| 461 | 467 |
| 462 void HostNPScriptObject::OnReceivedSupportID(bool success, | 468 void HostNPScriptObject::OnReceivedSupportID( |
| 463 const std::string& support_id) { | 469 remoting::SupportAccessVerifier* access_verifier, |
| 470 bool success, | |
| 471 const std::string& support_id) { | |
| 464 CHECK_NE(base::PlatformThread::CurrentId(), np_thread_id_); | 472 CHECK_NE(base::PlatformThread::CurrentId(), np_thread_id_); |
| 465 | 473 |
| 466 if (!success) { | 474 if (!success) { |
| 467 // TODO(wez): Replace the success/fail flag with full error reporting. | 475 // TODO(wez): Replace the success/fail flag with full error reporting. |
| 468 OnHostShutdown(); | 476 OnHostShutdown(); |
| 469 return; | 477 return; |
| 470 } | 478 } |
| 471 | 479 |
| 472 // Combine the Support Id with the Host Id to make the Access Code | 480 // Inform the AccessVerifier of our Support-Id, for authentication. |
| 481 access_verifier->OnMe2MomHostRegistered(success, support_id); | |
| 482 | |
| 483 // Combine the Support Id with the Host Id to make the Access Code. | |
| 473 // TODO(wez): Locking, anyone? | 484 // TODO(wez): Locking, anyone? |
| 474 access_code_ = support_id + "-" + host_secret_; | 485 access_code_ = support_id + "-" + host_secret_; |
| 475 host_secret_ = std::string(); | 486 host_secret_.clear(); |
| 476 | 487 |
| 477 // Let the caller know that life is good. | 488 // Let the caller know that life is good. |
| 478 OnStateChanged(kReceivedAccessCode); | 489 OnStateChanged(kReceivedAccessCode); |
| 479 } | 490 } |
| 480 | 491 |
| 481 void HostNPScriptObject::OnConnected() { | 492 void HostNPScriptObject::OnConnected() { |
| 482 CHECK_NE(base::PlatformThread::CurrentId(), np_thread_id_); | 493 CHECK_NE(base::PlatformThread::CurrentId(), np_thread_id_); |
| 483 OnStateChanged(kConnected); | 494 OnStateChanged(kConnected); |
| 484 } | 495 } |
| 485 | 496 |
| (...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 864 return STRINGIZE(HOST_PLUGIN_MIME_TYPE) ":" | 875 return STRINGIZE(HOST_PLUGIN_MIME_TYPE) ":" |
| 865 HOST_PLUGIN_NAME ":" | 876 HOST_PLUGIN_NAME ":" |
| 866 HOST_PLUGIN_DESCRIPTION; | 877 HOST_PLUGIN_DESCRIPTION; |
| 867 } | 878 } |
| 868 | 879 |
| 869 OSCALL NPError NP_GetValue(void* npp, NPPVariable variable, void* value) { | 880 OSCALL NPError NP_GetValue(void* npp, NPPVariable variable, void* value) { |
| 870 return GetValue((NPP)npp, variable, value); | 881 return GetValue((NPP)npp, variable, value); |
| 871 } | 882 } |
| 872 | 883 |
| 873 } // extern "C" | 884 } // extern "C" |
| OLD | NEW |