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 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 } | 104 } |
105 bool SetSslRole(rtc::SSLRole role) override { | 105 bool SetSslRole(rtc::SSLRole role) override { |
106 ssl_role_ = role; | 106 ssl_role_ = role; |
107 return true; | 107 return true; |
108 } | 108 } |
109 bool GetSslRole(rtc::SSLRole* role) const override { | 109 bool GetSslRole(rtc::SSLRole* role) const override { |
110 *role = ssl_role_; | 110 *role = ssl_role_; |
111 return true; | 111 return true; |
112 } | 112 } |
113 | 113 |
114 void Connect() override { | |
115 if (state_ == STATE_INIT) { | |
116 state_ = STATE_CONNECTING; | |
117 } | |
118 } | |
119 | |
120 void MaybeStartGathering() override { | 114 void MaybeStartGathering() override { |
121 if (gathering_state_ == kIceGatheringNew) { | 115 if (gathering_state_ == kIceGatheringNew) { |
122 gathering_state_ = kIceGatheringGathering; | 116 gathering_state_ = kIceGatheringGathering; |
123 SignalGatheringState(this); | 117 SignalGatheringState(this); |
124 } | 118 } |
125 } | 119 } |
126 | 120 |
127 IceGatheringState gathering_state() const override { | 121 IceGatheringState gathering_state() const override { |
128 return gathering_state_; | 122 return gathering_state_; |
129 } | 123 } |
130 | 124 |
131 void Reset() { | 125 void Reset() { |
132 if (state_ != STATE_INIT) { | 126 if (state_ != STATE_INIT) { |
133 state_ = STATE_INIT; | 127 state_ = STATE_INIT; |
134 if (dest_) { | 128 if (dest_) { |
135 dest_->state_ = STATE_INIT; | 129 dest_->state_ = STATE_INIT; |
136 dest_->dest_ = nullptr; | 130 dest_->dest_ = nullptr; |
137 dest_ = nullptr; | 131 dest_ = nullptr; |
138 } | 132 } |
139 } | 133 } |
140 } | 134 } |
141 | 135 |
142 void SetWritable(bool writable) { set_writable(writable); } | 136 void SetWritable(bool writable) { set_writable(writable); } |
143 | 137 |
144 // Simulates the two transport channels connecting to each other. | 138 // Simulates the two transport channels connecting to each other. |
145 // If |asymmetric| is true this method only affects this FakeTransportChannel. | 139 // If |asymmetric| is true this method only affects this FakeTransportChannel. |
146 // If false, it affects |dest| as well. | 140 // If false, it affects |dest| as well. |
147 void SetDestination(FakeTransportChannel* dest, bool asymmetric = false) { | 141 void SetDestination(FakeTransportChannel* dest, bool asymmetric = false) { |
148 if (state_ == STATE_CONNECTING && dest) { | 142 if (state_ == STATE_INIT && dest) { |
149 // This simulates the delivery of candidates. | 143 // This simulates the delivery of candidates. |
150 dest_ = dest; | 144 dest_ = dest; |
151 if (local_cert_ && dest_->local_cert_) { | 145 if (local_cert_ && dest_->local_cert_) { |
152 do_dtls_ = true; | 146 do_dtls_ = true; |
153 NegotiateSrtpCiphers(); | 147 NegotiateSrtpCiphers(); |
154 } | 148 } |
155 state_ = STATE_CONNECTED; | 149 state_ = STATE_CONNECTED; |
156 set_writable(true); | 150 set_writable(true); |
157 if (!asymmetric) { | 151 if (!asymmetric) { |
158 dest->SetDestination(this, true); | 152 dest->SetDestination(this, true); |
159 } | 153 } |
160 } else if (state_ == STATE_CONNECTED && !dest) { | 154 } else if (state_ == STATE_CONNECTED && !dest) { |
161 // Simulates loss of connectivity, by asymmetrically forgetting dest_. | 155 // Simulates loss of connectivity, by asymmetrically forgetting dest_. |
162 dest_ = nullptr; | 156 dest_ = nullptr; |
163 state_ = STATE_CONNECTING; | 157 state_ = STATE_INIT; |
164 set_writable(false); | 158 set_writable(false); |
165 } | 159 } |
166 } | 160 } |
167 | 161 |
168 void SetConnectionCount(size_t connection_count) { | 162 void SetConnectionCount(size_t connection_count) { |
169 size_t old_connection_count = connection_count_; | 163 size_t old_connection_count = connection_count_; |
170 connection_count_ = connection_count; | 164 connection_count_ = connection_count; |
171 if (connection_count) | 165 if (connection_count) |
172 had_connection_ = true; | 166 had_connection_ = true; |
173 // In this fake transport channel, |connection_count_| determines the | 167 // In this fake transport channel, |connection_count_| determines the |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
307 for (std::vector<int>::const_iterator it2 = dest_->srtp_ciphers_.begin(); | 301 for (std::vector<int>::const_iterator it2 = dest_->srtp_ciphers_.begin(); |
308 it2 != dest_->srtp_ciphers_.end(); ++it2) { | 302 it2 != dest_->srtp_ciphers_.end(); ++it2) { |
309 if (*it1 == *it2) { | 303 if (*it1 == *it2) { |
310 chosen_crypto_suite_ = *it1; | 304 chosen_crypto_suite_ = *it1; |
311 return; | 305 return; |
312 } | 306 } |
313 } | 307 } |
314 } | 308 } |
315 } | 309 } |
316 | 310 |
317 enum State { STATE_INIT, STATE_CONNECTING, STATE_CONNECTED }; | 311 enum State { STATE_INIT, STATE_CONNECTED }; |
318 FakeTransportChannel* dest_ = nullptr; | 312 FakeTransportChannel* dest_ = nullptr; |
319 State state_ = STATE_INIT; | 313 State state_ = STATE_INIT; |
320 bool async_ = false; | 314 bool async_ = false; |
321 Candidates remote_candidates_; | 315 Candidates remote_candidates_; |
322 rtc::scoped_refptr<rtc::RTCCertificate> local_cert_; | 316 rtc::scoped_refptr<rtc::RTCCertificate> local_cert_; |
323 rtc::FakeSSLCertificate* remote_cert_ = nullptr; | 317 rtc::FakeSSLCertificate* remote_cert_ = nullptr; |
324 bool do_dtls_ = false; | 318 bool do_dtls_ = false; |
325 std::vector<int> srtp_ciphers_; | 319 std::vector<int> srtp_ciphers_; |
326 int chosen_crypto_suite_ = rtc::SRTP_INVALID_CRYPTO_SUITE; | 320 int chosen_crypto_suite_ = rtc::SRTP_INVALID_CRYPTO_SUITE; |
327 int receiving_timeout_ = -1; | 321 int receiving_timeout_ = -1; |
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
571 rtc::CreateRandomString(cricket::ICE_PWD_LENGTH), cricket::ICEMODE_FULL, | 565 rtc::CreateRandomString(cricket::ICE_PWD_LENGTH), cricket::ICEMODE_FULL, |
572 cricket::CONNECTIONROLE_NONE, nullptr); | 566 cricket::CONNECTIONROLE_NONE, nullptr); |
573 for (auto& kv : transports()) { | 567 for (auto& kv : transports()) { |
574 FakeTransport* transport = static_cast<FakeTransport*>(kv.second); | 568 FakeTransport* transport = static_cast<FakeTransport*>(kv.second); |
575 // Set local transport description for FakeTransport before connecting. | 569 // Set local transport description for FakeTransport before connecting. |
576 // Otherwise, the RTC_CHECK in Transport.ConnectChannel will fail. | 570 // Otherwise, the RTC_CHECK in Transport.ConnectChannel will fail. |
577 if (!transport->local_description()) { | 571 if (!transport->local_description()) { |
578 transport->SetLocalTransportDescription(faketransport_desc, | 572 transport->SetLocalTransportDescription(faketransport_desc, |
579 cricket::CA_OFFER, nullptr); | 573 cricket::CA_OFFER, nullptr); |
580 } | 574 } |
581 transport->ConnectChannels(); | |
582 transport->MaybeStartGathering(); | 575 transport->MaybeStartGathering(); |
583 } | 576 } |
584 } | 577 } |
585 | 578 |
586 private: | 579 private: |
587 bool fail_create_channel_; | 580 bool fail_create_channel_; |
588 }; | 581 }; |
589 | 582 |
590 } // namespace cricket | 583 } // namespace cricket |
591 | 584 |
592 #endif // WEBRTC_P2P_BASE_FAKETRANSPORTCONTROLLER_H_ | 585 #endif // WEBRTC_P2P_BASE_FAKETRANSPORTCONTROLLER_H_ |
OLD | NEW |