| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2009 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2009 The WebRTC Project Authors. All rights reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 | 31 |
| 32 struct PacketMessageData : public rtc::MessageData { | 32 struct PacketMessageData : public rtc::MessageData { |
| 33 PacketMessageData(const char* data, size_t len) : packet(data, len) { | 33 PacketMessageData(const char* data, size_t len) : packet(data, len) { |
| 34 } | 34 } |
| 35 rtc::Buffer packet; | 35 rtc::Buffer packet; |
| 36 }; | 36 }; |
| 37 | 37 |
| 38 // Fake transport channel class, which can be passed to anything that needs a | 38 // Fake transport channel class, which can be passed to anything that needs a |
| 39 // transport channel. Can be informed of another FakeTransportChannel via | 39 // transport channel. Can be informed of another FakeTransportChannel via |
| 40 // SetDestination. | 40 // SetDestination. |
| 41 // TODO(hbos): Move implementation to .cc file, this and other classes in file. |
| 41 class FakeTransportChannel : public TransportChannelImpl, | 42 class FakeTransportChannel : public TransportChannelImpl, |
| 42 public rtc::MessageHandler { | 43 public rtc::MessageHandler { |
| 43 public: | 44 public: |
| 44 explicit FakeTransportChannel(Transport* transport, | 45 explicit FakeTransportChannel(Transport* transport, |
| 45 const std::string& content_name, | 46 const std::string& content_name, |
| 46 int component) | 47 int component) |
| 47 : TransportChannelImpl(content_name, component), | 48 : TransportChannelImpl(content_name, component), |
| 48 transport_(transport), | 49 transport_(transport), |
| 49 dest_(NULL), | 50 dest_(NULL), |
| 50 state_(STATE_INIT), | 51 state_(STATE_INIT), |
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 325 | 326 |
| 326 // Fake transport class, which can be passed to anything that needs a Transport. | 327 // Fake transport class, which can be passed to anything that needs a Transport. |
| 327 // Can be informed of another FakeTransport via SetDestination (low-tech way | 328 // Can be informed of another FakeTransport via SetDestination (low-tech way |
| 328 // of doing candidates) | 329 // of doing candidates) |
| 329 class FakeTransport : public Transport { | 330 class FakeTransport : public Transport { |
| 330 public: | 331 public: |
| 331 typedef std::map<int, FakeTransportChannel*> ChannelMap; | 332 typedef std::map<int, FakeTransportChannel*> ChannelMap; |
| 332 FakeTransport(rtc::Thread* signaling_thread, | 333 FakeTransport(rtc::Thread* signaling_thread, |
| 333 rtc::Thread* worker_thread, | 334 rtc::Thread* worker_thread, |
| 334 const std::string& content_name, | 335 const std::string& content_name, |
| 335 PortAllocator* alllocator = NULL) | 336 PortAllocator* alllocator = nullptr) |
| 336 : Transport(signaling_thread, worker_thread, | 337 : Transport(signaling_thread, worker_thread, |
| 337 content_name, NULL), | 338 content_name, nullptr), |
| 338 dest_(NULL), | 339 dest_(nullptr), |
| 339 async_(false), | 340 async_(false) { |
| 340 identity_(NULL) { | |
| 341 } | 341 } |
| 342 ~FakeTransport() { | 342 ~FakeTransport() { |
| 343 DestroyAllChannels(); | 343 DestroyAllChannels(); |
| 344 } | 344 } |
| 345 | 345 |
| 346 const ChannelMap& channels() const { return channels_; } | 346 const ChannelMap& channels() const { return channels_; } |
| 347 | 347 |
| 348 void SetAsync(bool async) { async_ = async; } | 348 void SetAsync(bool async) { async_ = async; } |
| 349 void SetDestination(FakeTransport* dest) { | 349 void SetDestination(FakeTransport* dest) { |
| 350 dest_ = dest; | 350 dest_ = dest; |
| 351 for (ChannelMap::iterator it = channels_.begin(); it != channels_.end(); | 351 for (ChannelMap::iterator it = channels_.begin(); it != channels_.end(); |
| 352 ++it) { | 352 ++it) { |
| 353 it->second->SetLocalIdentity(identity_); | 353 // TODO(hbos): SetLocalCertificate |
| 354 it->second->SetLocalIdentity( |
| 355 certificate_ ? certificate_->identity() : nullptr); |
| 354 SetChannelDestination(it->first, it->second); | 356 SetChannelDestination(it->first, it->second); |
| 355 } | 357 } |
| 356 } | 358 } |
| 357 | 359 |
| 358 void SetWritable(bool writable) { | 360 void SetWritable(bool writable) { |
| 359 for (ChannelMap::iterator it = channels_.begin(); it != channels_.end(); | 361 for (ChannelMap::iterator it = channels_.begin(); it != channels_.end(); |
| 360 ++it) { | 362 ++it) { |
| 361 it->second->SetWritable(writable); | 363 it->second->SetWritable(writable); |
| 362 } | 364 } |
| 363 } | 365 } |
| 364 | 366 |
| 365 void set_identity(rtc::SSLIdentity* identity) { | 367 void set_certificate( |
| 366 identity_ = identity; | 368 const rtc::scoped_refptr<rtc::RTCCertificate>& certificate) { |
| 369 certificate_ = certificate; |
| 367 } | 370 } |
| 368 | 371 |
| 369 using Transport::local_description; | 372 using Transport::local_description; |
| 370 using Transport::remote_description; | 373 using Transport::remote_description; |
| 371 | 374 |
| 372 protected: | 375 protected: |
| 373 virtual TransportChannelImpl* CreateTransportChannel(int component) { | 376 virtual TransportChannelImpl* CreateTransportChannel(int component) { |
| 374 if (channels_.find(component) != channels_.end()) { | 377 if (channels_.find(component) != channels_.end()) { |
| 375 return NULL; | 378 return NULL; |
| 376 } | 379 } |
| 377 FakeTransportChannel* channel = | 380 FakeTransportChannel* channel = |
| 378 new FakeTransportChannel(this, content_name(), component); | 381 new FakeTransportChannel(this, content_name(), component); |
| 379 channel->SetAsync(async_); | 382 channel->SetAsync(async_); |
| 380 SetChannelDestination(component, channel); | 383 SetChannelDestination(component, channel); |
| 381 channels_[component] = channel; | 384 channels_[component] = channel; |
| 382 return channel; | 385 return channel; |
| 383 } | 386 } |
| 384 virtual void DestroyTransportChannel(TransportChannelImpl* channel) { | 387 virtual void DestroyTransportChannel(TransportChannelImpl* channel) { |
| 385 channels_.erase(channel->component()); | 388 channels_.erase(channel->component()); |
| 386 delete channel; | 389 delete channel; |
| 387 } | 390 } |
| 388 virtual void SetIdentity_w(rtc::SSLIdentity* identity) { | 391 void SetCertificate_w( |
| 389 identity_ = identity; | 392 const rtc::scoped_refptr<rtc::RTCCertificate>& certificate) override { |
| 393 certificate_ = certificate; |
| 390 } | 394 } |
| 391 virtual bool GetIdentity_w(rtc::SSLIdentity** identity) { | 395 bool GetCertificate_w( |
| 392 if (!identity_) | 396 rtc::scoped_refptr<rtc::RTCCertificate>* certificate) override { |
| 397 if (!certificate_) |
| 393 return false; | 398 return false; |
| 394 | 399 |
| 395 *identity = identity_->GetReference(); | 400 *certificate = certificate_; |
| 396 return true; | 401 return true; |
| 397 } | 402 } |
| 398 | 403 |
| 399 private: | 404 private: |
| 400 FakeTransportChannel* GetFakeChannel(int component) { | 405 FakeTransportChannel* GetFakeChannel(int component) { |
| 401 ChannelMap::iterator it = channels_.find(component); | 406 ChannelMap::iterator it = channels_.find(component); |
| 402 return (it != channels_.end()) ? it->second : NULL; | 407 return (it != channels_.end()) ? it->second : NULL; |
| 403 } | 408 } |
| 404 void SetChannelDestination(int component, | 409 void SetChannelDestination(int component, |
| 405 FakeTransportChannel* channel) { | 410 FakeTransportChannel* channel) { |
| 406 FakeTransportChannel* dest_channel = NULL; | 411 FakeTransportChannel* dest_channel = NULL; |
| 407 if (dest_) { | 412 if (dest_) { |
| 408 dest_channel = dest_->GetFakeChannel(component); | 413 dest_channel = dest_->GetFakeChannel(component); |
| 409 if (dest_channel) { | 414 if (dest_channel) { |
| 410 dest_channel->SetLocalIdentity(dest_->identity_); | 415 // TODO(hbos): SetLocalCertificate |
| 416 dest_channel->SetLocalIdentity( |
| 417 dest_->certificate_ ? dest_->certificate_->identity() : nullptr); |
| 411 } | 418 } |
| 412 } | 419 } |
| 413 channel->SetDestination(dest_channel); | 420 channel->SetDestination(dest_channel); |
| 414 } | 421 } |
| 415 | 422 |
| 416 // Note, this is distinct from the Channel map owned by Transport. | 423 // Note, this is distinct from the Channel map owned by Transport. |
| 417 // This map just tracks the FakeTransportChannels created by this class. | 424 // This map just tracks the FakeTransportChannels created by this class. |
| 418 ChannelMap channels_; | 425 ChannelMap channels_; |
| 419 FakeTransport* dest_; | 426 FakeTransport* dest_; |
| 420 bool async_; | 427 bool async_; |
| 421 rtc::SSLIdentity* identity_; | 428 rtc::scoped_refptr<rtc::RTCCertificate> certificate_; |
| 422 }; | 429 }; |
| 423 | 430 |
| 424 // Fake session class, which can be passed into a BaseChannel object for | 431 // Fake session class, which can be passed into a BaseChannel object for |
| 425 // test purposes. Can be connected to other FakeSessions via Connect(). | 432 // test purposes. Can be connected to other FakeSessions via Connect(). |
| 426 class FakeSession : public BaseSession { | 433 class FakeSession : public BaseSession { |
| 427 public: | 434 public: |
| 428 explicit FakeSession() | 435 explicit FakeSession() |
| 429 : BaseSession(rtc::Thread::Current(), | 436 : BaseSession(rtc::Thread::Current(), |
| 430 rtc::Thread::Current(), | 437 rtc::Thread::Current(), |
| 431 NULL, "", "", true), | 438 NULL, "", "", true), |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 467 return NULL; | 474 return NULL; |
| 468 } | 475 } |
| 469 return BaseSession::CreateChannel(content_name, component); | 476 return BaseSession::CreateChannel(content_name, component); |
| 470 } | 477 } |
| 471 | 478 |
| 472 void set_fail_channel_creation(bool fail_channel_creation) { | 479 void set_fail_channel_creation(bool fail_channel_creation) { |
| 473 fail_create_channel_ = fail_channel_creation; | 480 fail_create_channel_ = fail_channel_creation; |
| 474 } | 481 } |
| 475 | 482 |
| 476 // TODO: Hoist this into Session when we re-work the Session code. | 483 // TODO: Hoist this into Session when we re-work the Session code. |
| 477 void set_ssl_identity(rtc::SSLIdentity* identity) { | 484 void set_ssl_rtccertificate( |
| 485 const rtc::scoped_refptr<rtc::RTCCertificate>& certificate) { |
| 478 for (TransportMap::const_iterator it = transport_proxies().begin(); | 486 for (TransportMap::const_iterator it = transport_proxies().begin(); |
| 479 it != transport_proxies().end(); ++it) { | 487 it != transport_proxies().end(); ++it) { |
| 480 // We know that we have a FakeTransport* | 488 // We know that we have a FakeTransport* |
| 481 | 489 |
| 482 static_cast<FakeTransport*>(it->second->impl())->set_identity | 490 static_cast<FakeTransport*>(it->second->impl())->set_certificate |
| 483 (identity); | 491 (certificate); |
| 484 } | 492 } |
| 485 } | 493 } |
| 486 | 494 |
| 487 protected: | 495 protected: |
| 488 virtual Transport* CreateTransport(const std::string& content_name) { | 496 virtual Transport* CreateTransport(const std::string& content_name) { |
| 489 return new FakeTransport(signaling_thread(), worker_thread(), content_name); | 497 return new FakeTransport(signaling_thread(), worker_thread(), content_name); |
| 490 } | 498 } |
| 491 | 499 |
| 492 void CompleteNegotiation() { | 500 void CompleteNegotiation() { |
| 493 for (TransportMap::const_iterator it = transport_proxies().begin(); | 501 for (TransportMap::const_iterator it = transport_proxies().begin(); |
| 494 it != transport_proxies().end(); ++it) { | 502 it != transport_proxies().end(); ++it) { |
| 495 it->second->CompleteNegotiation(); | 503 it->second->CompleteNegotiation(); |
| 496 it->second->ConnectChannels(); | 504 it->second->ConnectChannels(); |
| 497 } | 505 } |
| 498 } | 506 } |
| 499 | 507 |
| 500 private: | 508 private: |
| 501 bool fail_create_channel_; | 509 bool fail_create_channel_; |
| 502 }; | 510 }; |
| 503 | 511 |
| 504 } // namespace cricket | 512 } // namespace cricket |
| 505 | 513 |
| 506 #endif // WEBRTC_P2P_BASE_FAKESESSION_H_ | 514 #endif // WEBRTC_P2P_BASE_FAKESESSION_H_ |
| OLD | NEW |