OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2004 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 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 const TransportDescription& new_desc) { | 114 const TransportDescription& new_desc) { |
115 return IceCredentialsChanged(old_desc.ice_ufrag, old_desc.ice_pwd, | 115 return IceCredentialsChanged(old_desc.ice_ufrag, old_desc.ice_pwd, |
116 new_desc.ice_ufrag, new_desc.ice_pwd); | 116 new_desc.ice_ufrag, new_desc.ice_pwd); |
117 } | 117 } |
118 | 118 |
119 Transport::Transport(rtc::Thread* signaling_thread, | 119 Transport::Transport(rtc::Thread* signaling_thread, |
120 rtc::Thread* worker_thread, | 120 rtc::Thread* worker_thread, |
121 const std::string& content_name, | 121 const std::string& content_name, |
122 const std::string& type, | 122 const std::string& type, |
123 PortAllocator* allocator) | 123 PortAllocator* allocator) |
124 : signaling_thread_(signaling_thread), | 124 : signaling_thread_(signaling_thread), |
125 worker_thread_(worker_thread), | 125 worker_thread_(worker_thread), |
126 content_name_(content_name), | 126 content_name_(content_name), |
127 type_(type), | 127 type_(type), |
128 allocator_(allocator), | 128 allocator_(allocator), |
129 destroyed_(false), | 129 destroyed_(false), |
130 readable_(TRANSPORT_STATE_NONE), | 130 readable_(TRANSPORT_STATE_NONE), |
131 writable_(TRANSPORT_STATE_NONE), | 131 writable_(TRANSPORT_STATE_NONE), |
132 receiving_(TRANSPORT_STATE_NONE), | 132 receiving_(TRANSPORT_STATE_NONE), |
133 was_writable_(false), | 133 was_writable_(false), |
134 connect_requested_(false), | 134 connect_requested_(false), |
135 ice_role_(ICEROLE_UNKNOWN), | 135 ice_role_(ICEROLE_UNKNOWN), |
136 tiebreaker_(0), | 136 tiebreaker_(0), |
137 protocol_(ICEPROTO_HYBRID), | 137 protocol_(ICEPROTO_HYBRID), |
138 remote_ice_mode_(ICEMODE_FULL) { | 138 remote_ice_mode_(ICEMODE_FULL), |
| 139 channel_receiving_timeout_(-1) { |
139 } | 140 } |
140 | 141 |
141 Transport::~Transport() { | 142 Transport::~Transport() { |
142 ASSERT(signaling_thread_->IsCurrent()); | 143 ASSERT(signaling_thread_->IsCurrent()); |
143 ASSERT(destroyed_); | 144 ASSERT(destroyed_); |
144 } | 145 } |
145 | 146 |
146 void Transport::SetIceRole(IceRole role) { | 147 void Transport::SetIceRole(IceRole role) { |
147 worker_thread_->Invoke<void>(Bind(&Transport::SetIceRole_w, this, role)); | 148 worker_thread_->Invoke<void>(Bind(&Transport::SetIceRole_w, this, role)); |
148 } | 149 } |
(...skipping 18 matching lines...) Expand all Loading... |
167 | 168 |
168 bool Transport::GetRemoteCertificate_w(rtc::SSLCertificate** cert) { | 169 bool Transport::GetRemoteCertificate_w(rtc::SSLCertificate** cert) { |
169 ASSERT(worker_thread()->IsCurrent()); | 170 ASSERT(worker_thread()->IsCurrent()); |
170 if (channels_.empty()) | 171 if (channels_.empty()) |
171 return false; | 172 return false; |
172 | 173 |
173 ChannelMap::iterator iter = channels_.begin(); | 174 ChannelMap::iterator iter = channels_.begin(); |
174 return iter->second->GetRemoteCertificate(cert); | 175 return iter->second->GetRemoteCertificate(cert); |
175 } | 176 } |
176 | 177 |
| 178 void Transport::SetChannelReceivingTimeout(int timeout_ms) { |
| 179 worker_thread_->Invoke<void>( |
| 180 Bind(&Transport::SetChannelReceivingTimeout_w, this, timeout_ms)); |
| 181 } |
| 182 |
| 183 void Transport::SetChannelReceivingTimeout_w(int timeout_ms) { |
| 184 ASSERT(worker_thread()->IsCurrent()); |
| 185 channel_receiving_timeout_ = timeout_ms; |
| 186 for (const auto& kv : channels_) { |
| 187 kv.second->SetReceivingTimeout(timeout_ms); |
| 188 } |
| 189 } |
| 190 |
177 bool Transport::SetLocalTransportDescription( | 191 bool Transport::SetLocalTransportDescription( |
178 const TransportDescription& description, | 192 const TransportDescription& description, |
179 ContentAction action, | 193 ContentAction action, |
180 std::string* error_desc) { | 194 std::string* error_desc) { |
181 return worker_thread_->Invoke<bool>(Bind( | 195 return worker_thread_->Invoke<bool>(Bind( |
182 &Transport::SetLocalTransportDescription_w, this, | 196 &Transport::SetLocalTransportDescription_w, this, |
183 description, action, error_desc)); | 197 description, action, error_desc)); |
184 } | 198 } |
185 | 199 |
186 bool Transport::SetRemoteTransportDescription( | 200 bool Transport::SetRemoteTransportDescription( |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
226 | 240 |
227 if (impl_exists) { | 241 if (impl_exists) { |
228 // If this is an existing channel, we should just return it without | 242 // If this is an existing channel, we should just return it without |
229 // connecting to all the signal again. | 243 // connecting to all the signal again. |
230 return impl; | 244 return impl; |
231 } | 245 } |
232 | 246 |
233 // Push down our transport state to the new channel. | 247 // Push down our transport state to the new channel. |
234 impl->SetIceRole(ice_role_); | 248 impl->SetIceRole(ice_role_); |
235 impl->SetIceTiebreaker(tiebreaker_); | 249 impl->SetIceTiebreaker(tiebreaker_); |
| 250 impl->SetReceivingTimeout(channel_receiving_timeout_); |
236 // TODO(ronghuawu): Change CreateChannel_w to be able to return error since | 251 // TODO(ronghuawu): Change CreateChannel_w to be able to return error since |
237 // below Apply**Description_w calls can fail. | 252 // below Apply**Description_w calls can fail. |
238 if (local_description_) | 253 if (local_description_) |
239 ApplyLocalTransportDescription_w(impl, NULL); | 254 ApplyLocalTransportDescription_w(impl, NULL); |
240 if (remote_description_) | 255 if (remote_description_) |
241 ApplyRemoteTransportDescription_w(impl, NULL); | 256 ApplyRemoteTransportDescription_w(impl, NULL); |
242 if (local_description_ && remote_description_) | 257 if (local_description_ && remote_description_) |
243 ApplyNegotiatedTransportDescription_w(impl, NULL); | 258 ApplyNegotiatedTransportDescription_w(impl, NULL); |
244 | 259 |
245 impl->SignalReadableState.connect(this, &Transport::OnChannelReadableState); | 260 impl->SignalReadableState.connect(this, &Transport::OnChannelReadableState); |
(...skipping 719 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
965 const TransportDescription* desc) { | 980 const TransportDescription* desc) { |
966 ASSERT(desc != NULL); | 981 ASSERT(desc != NULL); |
967 if (desc->transport_type == NS_JINGLE_ICE_UDP) { | 982 if (desc->transport_type == NS_JINGLE_ICE_UDP) { |
968 return (desc->HasOption(ICE_OPTION_GICE)) ? | 983 return (desc->HasOption(ICE_OPTION_GICE)) ? |
969 ICEPROTO_HYBRID : ICEPROTO_RFC5245; | 984 ICEPROTO_HYBRID : ICEPROTO_RFC5245; |
970 } | 985 } |
971 return ICEPROTO_GOOGLE; | 986 return ICEPROTO_GOOGLE; |
972 } | 987 } |
973 | 988 |
974 } // namespace cricket | 989 } // namespace cricket |
OLD | NEW |