OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2011 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 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 if (!dtls_->SetPeerCertificateDigest( | 260 if (!dtls_->SetPeerCertificateDigest( |
261 remote_fingerprint_algorithm_, | 261 remote_fingerprint_algorithm_, |
262 reinterpret_cast<unsigned char*>(remote_fingerprint_value_.data()), | 262 reinterpret_cast<unsigned char*>(remote_fingerprint_value_.data()), |
263 remote_fingerprint_value_.size())) { | 263 remote_fingerprint_value_.size())) { |
264 LOG_J(LS_ERROR, this) << "Couldn't set DTLS certificate digest."; | 264 LOG_J(LS_ERROR, this) << "Couldn't set DTLS certificate digest."; |
265 return false; | 265 return false; |
266 } | 266 } |
267 | 267 |
268 // Set up DTLS-SRTP, if it's been enabled. | 268 // Set up DTLS-SRTP, if it's been enabled. |
269 if (!srtp_ciphers_.empty()) { | 269 if (!srtp_ciphers_.empty()) { |
270 if (!dtls_->SetDtlsSrtpCiphers(srtp_ciphers_)) { | 270 if (!dtls_->SetDtlsSrtpCryptoSuites(srtp_ciphers_)) { |
271 LOG_J(LS_ERROR, this) << "Couldn't set DTLS-SRTP ciphers."; | 271 LOG_J(LS_ERROR, this) << "Couldn't set DTLS-SRTP ciphers."; |
272 return false; | 272 return false; |
273 } | 273 } |
274 } else { | 274 } else { |
275 LOG_J(LS_INFO, this) << "Not using DTLS-SRTP."; | 275 LOG_J(LS_INFO, this) << "Not using DTLS-SRTP."; |
276 } | 276 } |
277 | 277 |
278 LOG_J(LS_INFO, this) << "DTLS setup complete."; | 278 LOG_J(LS_INFO, this) << "DTLS setup complete."; |
279 return true; | 279 return true; |
280 } | 280 } |
281 | 281 |
282 bool DtlsTransportChannelWrapper::SetSrtpCiphers( | 282 bool DtlsTransportChannelWrapper::SetSrtpCryptoSuites( |
283 const std::vector<std::string>& ciphers) { | 283 const std::vector<int>& ciphers) { |
284 if (srtp_ciphers_ == ciphers) { | 284 if (srtp_ciphers_ == ciphers) |
285 return true; | 285 return true; |
286 } | |
287 | 286 |
288 if (dtls_state() == DTLS_TRANSPORT_CONNECTING) { | 287 if (dtls_state() == DTLS_TRANSPORT_CONNECTING) { |
289 LOG(LS_WARNING) << "Ignoring new SRTP ciphers while DTLS is negotiating"; | 288 LOG(LS_WARNING) << "Ignoring new SRTP ciphers while DTLS is negotiating"; |
290 return true; | 289 return true; |
291 } | 290 } |
292 | 291 |
293 if (dtls_state() == DTLS_TRANSPORT_CONNECTED) { | 292 if (dtls_state() == DTLS_TRANSPORT_CONNECTED) { |
294 // We don't support DTLS renegotiation currently. If new set of srtp ciphers | 293 // We don't support DTLS renegotiation currently. If new set of srtp ciphers |
295 // are different than what's being used currently, we will not use it. | 294 // are different than what's being used currently, we will not use it. |
296 // So for now, let's be happy (or sad) with a warning message. | 295 // So for now, let's be happy (or sad) with a warning message. |
297 std::string current_srtp_cipher; | 296 int current_srtp_cipher; |
298 if (!dtls_->GetDtlsSrtpCipher(¤t_srtp_cipher)) { | 297 if (!dtls_->GetDtlsSrtpCryptoSuite(¤t_srtp_cipher)) { |
299 LOG(LS_ERROR) << "Failed to get the current SRTP cipher for DTLS channel"; | 298 LOG(LS_ERROR) << "Failed to get the current SRTP cipher for DTLS channel"; |
300 return false; | 299 return false; |
301 } | 300 } |
302 const std::vector<std::string>::const_iterator iter = | 301 const std::vector<int>::const_iterator iter = |
303 std::find(ciphers.begin(), ciphers.end(), current_srtp_cipher); | 302 std::find(ciphers.begin(), ciphers.end(), current_srtp_cipher); |
304 if (iter == ciphers.end()) { | 303 if (iter == ciphers.end()) { |
305 std::string requested_str; | 304 std::string requested_str; |
306 for (size_t i = 0; i < ciphers.size(); ++i) { | 305 for (size_t i = 0; i < ciphers.size(); ++i) { |
307 requested_str.append(" "); | 306 requested_str.append(" "); |
308 requested_str.append(ciphers[i]); | 307 requested_str.append(rtc::SrtpCryptoSuiteToName(ciphers[i])); |
309 requested_str.append(" "); | 308 requested_str.append(" "); |
310 } | 309 } |
311 LOG(LS_WARNING) << "Ignoring new set of SRTP ciphers, as DTLS " | 310 LOG(LS_WARNING) << "Ignoring new set of SRTP ciphers, as DTLS " |
312 << "renegotiation is not supported currently " | 311 << "renegotiation is not supported currently " |
313 << "current cipher = " << current_srtp_cipher << " and " | 312 << "current cipher = " << current_srtp_cipher << " and " |
314 << "requested = " << "[" << requested_str << "]"; | 313 << "requested = " << "[" << requested_str << "]"; |
315 } | 314 } |
316 return true; | 315 return true; |
317 } | 316 } |
318 | 317 |
319 if (!VERIFY(dtls_state() == DTLS_TRANSPORT_NEW)) { | 318 if (!VERIFY(dtls_state() == DTLS_TRANSPORT_NEW)) { |
320 return false; | 319 return false; |
321 } | 320 } |
322 | 321 |
323 srtp_ciphers_ = ciphers; | 322 srtp_ciphers_ = ciphers; |
324 return true; | 323 return true; |
325 } | 324 } |
326 | 325 |
327 bool DtlsTransportChannelWrapper::GetSrtpCryptoSuite(std::string* cipher) { | 326 bool DtlsTransportChannelWrapper::GetSrtpCryptoSuite(int* cipher) { |
328 if (dtls_state() != DTLS_TRANSPORT_CONNECTED) { | 327 if (dtls_state() != DTLS_TRANSPORT_CONNECTED) { |
329 return false; | 328 return false; |
330 } | 329 } |
331 | 330 |
332 return dtls_->GetDtlsSrtpCipher(cipher); | 331 return dtls_->GetDtlsSrtpCryptoSuite(cipher); |
333 } | 332 } |
334 | 333 |
335 | 334 |
336 // Called from upper layers to send a media packet. | 335 // Called from upper layers to send a media packet. |
337 int DtlsTransportChannelWrapper::SendPacket( | 336 int DtlsTransportChannelWrapper::SendPacket( |
338 const char* data, size_t size, | 337 const char* data, size_t size, |
339 const rtc::PacketOptions& options, int flags) { | 338 const rtc::PacketOptions& options, int flags) { |
340 if (!dtls_active_) { | 339 if (!dtls_active_) { |
341 // Not doing DTLS. | 340 // Not doing DTLS. |
342 return channel_->SendPacket(data, size, options); | 341 return channel_->SendPacket(data, size, options); |
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
611 SignalRouteChange(this, candidate); | 610 SignalRouteChange(this, candidate); |
612 } | 611 } |
613 | 612 |
614 void DtlsTransportChannelWrapper::OnConnectionRemoved( | 613 void DtlsTransportChannelWrapper::OnConnectionRemoved( |
615 TransportChannelImpl* channel) { | 614 TransportChannelImpl* channel) { |
616 ASSERT(channel == channel_); | 615 ASSERT(channel == channel_); |
617 SignalConnectionRemoved(this); | 616 SignalConnectionRemoved(this); |
618 } | 617 } |
619 | 618 |
620 } // namespace cricket | 619 } // namespace cricket |
OLD | NEW |