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 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 return true; | 304 return true; |
305 } | 305 } |
306 | 306 |
307 void set_ssl_max_protocol_version(rtc::SSLProtocolVersion version) { | 307 void set_ssl_max_protocol_version(rtc::SSLProtocolVersion version) { |
308 ssl_max_version_ = version; | 308 ssl_max_version_ = version; |
309 } | 309 } |
310 rtc::SSLProtocolVersion ssl_max_protocol_version() const { | 310 rtc::SSLProtocolVersion ssl_max_protocol_version() const { |
311 return ssl_max_version_; | 311 return ssl_max_version_; |
312 } | 312 } |
313 | 313 |
| 314 void set_enable_gcm_ciphers(bool enable) { |
| 315 enable_gcm_ciphers_ = enable; |
| 316 } |
| 317 bool IsEnableGcmCiphers() const override { |
| 318 return enable_gcm_ciphers_; |
| 319 } |
| 320 |
314 private: | 321 private: |
315 enum State { STATE_INIT, STATE_CONNECTING, STATE_CONNECTED }; | 322 enum State { STATE_INIT, STATE_CONNECTING, STATE_CONNECTED }; |
316 Transport* transport_; | 323 Transport* transport_; |
317 FakeTransportChannel* dest_ = nullptr; | 324 FakeTransportChannel* dest_ = nullptr; |
318 State state_ = STATE_INIT; | 325 State state_ = STATE_INIT; |
319 bool async_ = false; | 326 bool async_ = false; |
320 Candidates remote_candidates_; | 327 Candidates remote_candidates_; |
321 rtc::scoped_refptr<rtc::RTCCertificate> local_cert_; | 328 rtc::scoped_refptr<rtc::RTCCertificate> local_cert_; |
322 rtc::FakeSSLCertificate* remote_cert_ = nullptr; | 329 rtc::FakeSSLCertificate* remote_cert_ = nullptr; |
323 bool do_dtls_ = false; | 330 bool do_dtls_ = false; |
324 std::vector<int> srtp_ciphers_; | 331 std::vector<int> srtp_ciphers_; |
325 int chosen_crypto_suite_ = rtc::SRTP_INVALID_CRYPTO_SUITE; | 332 int chosen_crypto_suite_ = rtc::SRTP_INVALID_CRYPTO_SUITE; |
326 int receiving_timeout_ = -1; | 333 int receiving_timeout_ = -1; |
327 bool gather_continually_ = false; | 334 bool gather_continually_ = false; |
328 IceRole role_ = ICEROLE_UNKNOWN; | 335 IceRole role_ = ICEROLE_UNKNOWN; |
329 uint64_t tiebreaker_ = 0; | 336 uint64_t tiebreaker_ = 0; |
330 std::string ice_ufrag_; | 337 std::string ice_ufrag_; |
331 std::string ice_pwd_; | 338 std::string ice_pwd_; |
332 std::string remote_ice_ufrag_; | 339 std::string remote_ice_ufrag_; |
333 std::string remote_ice_pwd_; | 340 std::string remote_ice_pwd_; |
334 IceMode remote_ice_mode_ = ICEMODE_FULL; | 341 IceMode remote_ice_mode_ = ICEMODE_FULL; |
335 rtc::SSLProtocolVersion ssl_max_version_ = rtc::SSL_PROTOCOL_DTLS_10; | 342 rtc::SSLProtocolVersion ssl_max_version_ = rtc::SSL_PROTOCOL_DTLS_10; |
| 343 bool enable_gcm_ciphers_ = false; |
336 rtc::SSLFingerprint dtls_fingerprint_; | 344 rtc::SSLFingerprint dtls_fingerprint_; |
337 rtc::SSLRole ssl_role_ = rtc::SSL_CLIENT; | 345 rtc::SSLRole ssl_role_ = rtc::SSL_CLIENT; |
338 size_t connection_count_ = 0; | 346 size_t connection_count_ = 0; |
339 IceGatheringState gathering_state_ = kIceGatheringNew; | 347 IceGatheringState gathering_state_ = kIceGatheringNew; |
340 bool had_connection_ = false; | 348 bool had_connection_ = false; |
341 }; | 349 }; |
342 | 350 |
343 // Fake transport class, which can be passed to anything that needs a Transport. | 351 // Fake transport class, which can be passed to anything that needs a Transport. |
344 // Can be informed of another FakeTransport via SetDestination (low-tech way | 352 // Can be informed of another FakeTransport via SetDestination (low-tech way |
345 // of doing candidates) | 353 // of doing candidates) |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
398 bool SetSslMaxProtocolVersion(rtc::SSLProtocolVersion version) override { | 406 bool SetSslMaxProtocolVersion(rtc::SSLProtocolVersion version) override { |
399 ssl_max_version_ = version; | 407 ssl_max_version_ = version; |
400 for (const auto& kv : channels_) { | 408 for (const auto& kv : channels_) { |
401 kv.second->set_ssl_max_protocol_version(ssl_max_version_); | 409 kv.second->set_ssl_max_protocol_version(ssl_max_version_); |
402 } | 410 } |
403 return true; | 411 return true; |
404 } | 412 } |
405 rtc::SSLProtocolVersion ssl_max_protocol_version() const { | 413 rtc::SSLProtocolVersion ssl_max_protocol_version() const { |
406 return ssl_max_version_; | 414 return ssl_max_version_; |
407 } | 415 } |
| 416 bool SetEnableGcmCiphers(bool enable) override { |
| 417 enable_gcm_ciphers_ = enable; |
| 418 for (const auto& kv : channels_) { |
| 419 kv.second->set_enable_gcm_ciphers(enable_gcm_ciphers_); |
| 420 } |
| 421 return true; |
| 422 } |
| 423 bool enable_gcm_ciphers() const { |
| 424 return enable_gcm_ciphers_; |
| 425 } |
408 | 426 |
409 using Transport::local_description; | 427 using Transport::local_description; |
410 using Transport::remote_description; | 428 using Transport::remote_description; |
411 | 429 |
412 protected: | 430 protected: |
413 TransportChannelImpl* CreateTransportChannel(int component) override { | 431 TransportChannelImpl* CreateTransportChannel(int component) override { |
414 if (channels_.find(component) != channels_.end()) { | 432 if (channels_.find(component) != channels_.end()) { |
415 return nullptr; | 433 return nullptr; |
416 } | 434 } |
417 FakeTransportChannel* channel = | 435 FakeTransportChannel* channel = |
418 new FakeTransportChannel(this, name(), component); | 436 new FakeTransportChannel(this, name(), component); |
419 channel->set_ssl_max_protocol_version(ssl_max_version_); | 437 channel->set_ssl_max_protocol_version(ssl_max_version_); |
| 438 channel->set_enable_gcm_ciphers(enable_gcm_ciphers_); |
420 channel->SetAsync(async_); | 439 channel->SetAsync(async_); |
421 SetChannelDestination(component, channel); | 440 SetChannelDestination(component, channel); |
422 channels_[component] = channel; | 441 channels_[component] = channel; |
423 return channel; | 442 return channel; |
424 } | 443 } |
425 | 444 |
426 void DestroyTransportChannel(TransportChannelImpl* channel) override { | 445 void DestroyTransportChannel(TransportChannelImpl* channel) override { |
427 channels_.erase(channel->component()); | 446 channels_.erase(channel->component()); |
428 delete channel; | 447 delete channel; |
429 } | 448 } |
(...skipping 17 matching lines...) Expand all Loading... |
447 | 466 |
448 // Note, this is distinct from the Channel map owned by Transport. | 467 // Note, this is distinct from the Channel map owned by Transport. |
449 // This map just tracks the FakeTransportChannels created by this class. | 468 // This map just tracks the FakeTransportChannels created by this class. |
450 // It's mainly needed so that we can access a FakeTransportChannel directly, | 469 // It's mainly needed so that we can access a FakeTransportChannel directly, |
451 // even if wrapped by a DtlsTransportChannelWrapper. | 470 // even if wrapped by a DtlsTransportChannelWrapper. |
452 ChannelMap channels_; | 471 ChannelMap channels_; |
453 FakeTransport* dest_ = nullptr; | 472 FakeTransport* dest_ = nullptr; |
454 bool async_ = false; | 473 bool async_ = false; |
455 rtc::scoped_refptr<rtc::RTCCertificate> certificate_; | 474 rtc::scoped_refptr<rtc::RTCCertificate> certificate_; |
456 rtc::SSLProtocolVersion ssl_max_version_ = rtc::SSL_PROTOCOL_DTLS_10; | 475 rtc::SSLProtocolVersion ssl_max_version_ = rtc::SSL_PROTOCOL_DTLS_10; |
| 476 bool enable_gcm_ciphers_ = false; |
457 }; | 477 }; |
458 | 478 |
459 // Fake TransportController class, which can be passed into a BaseChannel object | 479 // Fake TransportController class, which can be passed into a BaseChannel object |
460 // for test purposes. Can be connected to other FakeTransportControllers via | 480 // for test purposes. Can be connected to other FakeTransportControllers via |
461 // Connect(). | 481 // Connect(). |
462 // | 482 // |
463 // This fake is unusual in that for the most part, it's implemented with the | 483 // This fake is unusual in that for the most part, it's implemented with the |
464 // real TransportController code, but with fake TransportChannels underneath. | 484 // real TransportController code, but with fake TransportChannels underneath. |
465 class FakeTransportController : public TransportController { | 485 class FakeTransportController : public TransportController { |
466 public: | 486 public: |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
534 } | 554 } |
535 } | 555 } |
536 | 556 |
537 private: | 557 private: |
538 bool fail_create_channel_; | 558 bool fail_create_channel_; |
539 }; | 559 }; |
540 | 560 |
541 } // namespace cricket | 561 } // namespace cricket |
542 | 562 |
543 #endif // WEBRTC_P2P_BASE_FAKETRANSPORTCONTROLLER_H_ | 563 #endif // WEBRTC_P2P_BASE_FAKETRANSPORTCONTROLLER_H_ |
OLD | NEW |