| 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  | 
|   11 #include "webrtc/pc/srtpfilter.h" |   11 #include "webrtc/pc/srtpfilter.h" | 
|   12  |   12  | 
|   13 #include <string.h> |   13 #include <string.h> | 
|   14  |   14  | 
|   15 #include <algorithm> |   15 #include <algorithm> | 
|   16  |   16  | 
|   17 #include "webrtc/base/base64.h" |   17 #include "webrtc/base/base64.h" | 
|   18 #include "webrtc/base/buffer.h" |   18 #include "webrtc/base/buffer.h" | 
|   19 #include "webrtc/base/byteorder.h" |   19 #include "webrtc/base/byteorder.h" | 
|   20 #include "webrtc/base/checks.h" |   20 #include "webrtc/base/checks.h" | 
|   21 #include "webrtc/base/common.h" |   21 #include "webrtc/base/common.h" | 
|   22 #include "webrtc/base/logging.h" |   22 #include "webrtc/base/logging.h" | 
|   23 #include "webrtc/base/stringencode.h" |   23 #include "webrtc/base/stringencode.h" | 
|   24 #include "webrtc/base/timeutils.h" |   24 #include "webrtc/base/timeutils.h" | 
|   25 #include "webrtc/media/base/rtputils.h" |   25 #include "webrtc/media/base/rtputils.h" | 
 |   26 #include "webrtc/pc/externalhmac.h" | 
|   26  |   27  | 
|   27 // Enable this line to turn on SRTP debugging |   28 // Enable this line to turn on SRTP debugging | 
|   28 // #define SRTP_DEBUG |   29 // #define SRTP_DEBUG | 
|   29  |   30  | 
|   30 #ifdef HAVE_SRTP |   31 #ifdef HAVE_SRTP | 
|   31 extern "C" { |   32 extern "C" { | 
|   32 #ifdef SRTP_RELATIVE_PATH |   33 #ifdef SRTP_RELATIVE_PATH | 
|   33 #include "srtp.h"  // NOLINT |   34 #include "srtp.h"  // NOLINT | 
|   34 #include "srtp_priv.h"  // NOLINT |   35 #include "srtp_priv.h"  // NOLINT | 
|   35 #else |   36 #else | 
|   36 #include "third_party/libsrtp/srtp/include/srtp.h" |   37 #include "third_party/libsrtp/include/srtp.h" | 
|   37 #include "third_party/libsrtp/srtp/include/srtp_priv.h" |   38 #include "third_party/libsrtp/include/srtp_priv.h" | 
|   38 #endif  // SRTP_RELATIVE_PATH |   39 #endif  // SRTP_RELATIVE_PATH | 
|   39 } |   40 } | 
|   40 #ifdef  ENABLE_EXTERNAL_AUTH |   41  | 
|   41 #include "webrtc/pc/externalhmac.h" |  | 
|   42 #endif  // ENABLE_EXTERNAL_AUTH |  | 
|   43 #if !defined(NDEBUG) |   42 #if !defined(NDEBUG) | 
|   44 extern "C" debug_module_t mod_srtp; |   43 extern "C" srtp_debug_module_t mod_srtp; | 
|   45 extern "C" debug_module_t mod_auth; |   44 extern "C" srtp_debug_module_t mod_auth; | 
|   46 extern "C" debug_module_t mod_cipher; |   45 extern "C" srtp_debug_module_t mod_cipher; | 
|   47 extern "C" debug_module_t mod_stat; |   46 extern "C" srtp_debug_module_t mod_stat; | 
|   48 extern "C" debug_module_t mod_alloc; |   47 extern "C" srtp_debug_module_t mod_alloc; | 
|   49 extern "C" debug_module_t mod_aes_icm; |   48 extern "C" srtp_debug_module_t mod_aes_icm; | 
|   50 extern "C" debug_module_t mod_aes_hmac; |   49 extern "C" srtp_debug_module_t mod_aes_hmac; | 
|   51 #endif |   50 #endif | 
|   52 #endif  // HAVE_SRTP |   51 #endif  // HAVE_SRTP | 
|   53  |   52  | 
|   54 namespace cricket { |   53 namespace cricket { | 
|   55  |   54  | 
|   56 #ifndef HAVE_SRTP |   55 #ifndef HAVE_SRTP | 
|   57  |   56  | 
|   58 // This helper function is used on systems that don't (yet) have SRTP, |   57 // This helper function is used on systems that don't (yet) have SRTP, | 
|   59 // to log that the functions that require it won't do anything. |   58 // to log that the functions that require it won't do anything. | 
|   60 namespace { |   59 namespace { | 
| (...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  530   } |  529   } | 
|  531  |  530  | 
|  532   *out_len = in_len; |  531   *out_len = in_len; | 
|  533   int err = srtp_protect(session_, p, out_len); |  532   int err = srtp_protect(session_, p, out_len); | 
|  534   uint32_t ssrc; |  533   uint32_t ssrc; | 
|  535   if (GetRtpSsrc(p, in_len, &ssrc)) { |  534   if (GetRtpSsrc(p, in_len, &ssrc)) { | 
|  536     srtp_stat_->AddProtectRtpResult(ssrc, err); |  535     srtp_stat_->AddProtectRtpResult(ssrc, err); | 
|  537   } |  536   } | 
|  538   int seq_num; |  537   int seq_num; | 
|  539   GetRtpSeqNum(p, in_len, &seq_num); |  538   GetRtpSeqNum(p, in_len, &seq_num); | 
|  540   if (err != err_status_ok) { |  539   if (err != srtp_err_status_ok) { | 
|  541     LOG(LS_WARNING) << "Failed to protect SRTP packet, seqnum=" |  540     LOG(LS_WARNING) << "Failed to protect SRTP packet, seqnum=" | 
|  542                     << seq_num << ", err=" << err << ", last seqnum=" |  541                     << seq_num << ", err=" << err << ", last seqnum=" | 
|  543                     << last_send_seq_num_; |  542                     << last_send_seq_num_; | 
|  544     return false; |  543     return false; | 
|  545   } |  544   } | 
|  546   last_send_seq_num_ = seq_num; |  545   last_send_seq_num_ = seq_num; | 
|  547   return true; |  546   return true; | 
|  548 } |  547 } | 
|  549  |  548  | 
|  550 bool SrtpSession::ProtectRtp(void* p, |  549 bool SrtpSession::ProtectRtp(void* p, | 
| (...skipping 17 matching lines...) Expand all  Loading... | 
|  568   int need_len = in_len + sizeof(uint32_t) + rtcp_auth_tag_len_;  // NOLINT |  567   int need_len = in_len + sizeof(uint32_t) + rtcp_auth_tag_len_;  // NOLINT | 
|  569   if (max_len < need_len) { |  568   if (max_len < need_len) { | 
|  570     LOG(LS_WARNING) << "Failed to protect SRTCP packet: The buffer length " |  569     LOG(LS_WARNING) << "Failed to protect SRTCP packet: The buffer length " | 
|  571                     << max_len << " is less than the needed " << need_len; |  570                     << max_len << " is less than the needed " << need_len; | 
|  572     return false; |  571     return false; | 
|  573   } |  572   } | 
|  574  |  573  | 
|  575   *out_len = in_len; |  574   *out_len = in_len; | 
|  576   int err = srtp_protect_rtcp(session_, p, out_len); |  575   int err = srtp_protect_rtcp(session_, p, out_len); | 
|  577   srtp_stat_->AddProtectRtcpResult(err); |  576   srtp_stat_->AddProtectRtcpResult(err); | 
|  578   if (err != err_status_ok) { |  577   if (err != srtp_err_status_ok) { | 
|  579     LOG(LS_WARNING) << "Failed to protect SRTCP packet, err=" << err; |  578     LOG(LS_WARNING) << "Failed to protect SRTCP packet, err=" << err; | 
|  580     return false; |  579     return false; | 
|  581   } |  580   } | 
|  582   return true; |  581   return true; | 
|  583 } |  582 } | 
|  584  |  583  | 
|  585 bool SrtpSession::UnprotectRtp(void* p, int in_len, int* out_len) { |  584 bool SrtpSession::UnprotectRtp(void* p, int in_len, int* out_len) { | 
|  586   RTC_DCHECK(thread_checker_.CalledOnValidThread()); |  585   RTC_DCHECK(thread_checker_.CalledOnValidThread()); | 
|  587   if (!session_) { |  586   if (!session_) { | 
|  588     LOG(LS_WARNING) << "Failed to unprotect SRTP packet: no SRTP Session"; |  587     LOG(LS_WARNING) << "Failed to unprotect SRTP packet: no SRTP Session"; | 
|  589     return false; |  588     return false; | 
|  590   } |  589   } | 
|  591  |  590  | 
|  592   *out_len = in_len; |  591   *out_len = in_len; | 
|  593   int err = srtp_unprotect(session_, p, out_len); |  592   int err = srtp_unprotect(session_, p, out_len); | 
|  594   uint32_t ssrc; |  593   uint32_t ssrc; | 
|  595   if (GetRtpSsrc(p, in_len, &ssrc)) { |  594   if (GetRtpSsrc(p, in_len, &ssrc)) { | 
|  596     srtp_stat_->AddUnprotectRtpResult(ssrc, err); |  595     srtp_stat_->AddUnprotectRtpResult(ssrc, err); | 
|  597   } |  596   } | 
|  598   if (err != err_status_ok) { |  597   if (err != srtp_err_status_ok) { | 
|  599     LOG(LS_WARNING) << "Failed to unprotect SRTP packet, err=" << err; |  598     LOG(LS_WARNING) << "Failed to unprotect SRTP packet, err=" << err; | 
|  600     return false; |  599     return false; | 
|  601   } |  600   } | 
|  602   return true; |  601   return true; | 
|  603 } |  602 } | 
|  604  |  603  | 
|  605 bool SrtpSession::UnprotectRtcp(void* p, int in_len, int* out_len) { |  604 bool SrtpSession::UnprotectRtcp(void* p, int in_len, int* out_len) { | 
|  606   RTC_DCHECK(thread_checker_.CalledOnValidThread()); |  605   RTC_DCHECK(thread_checker_.CalledOnValidThread()); | 
|  607   if (!session_) { |  606   if (!session_) { | 
|  608     LOG(LS_WARNING) << "Failed to unprotect SRTCP packet: no SRTP Session"; |  607     LOG(LS_WARNING) << "Failed to unprotect SRTCP packet: no SRTP Session"; | 
|  609     return false; |  608     return false; | 
|  610   } |  609   } | 
|  611  |  610  | 
|  612   *out_len = in_len; |  611   *out_len = in_len; | 
|  613   int err = srtp_unprotect_rtcp(session_, p, out_len); |  612   int err = srtp_unprotect_rtcp(session_, p, out_len); | 
|  614   srtp_stat_->AddUnprotectRtcpResult(err); |  613   srtp_stat_->AddUnprotectRtcpResult(err); | 
|  615   if (err != err_status_ok) { |  614   if (err != srtp_err_status_ok) { | 
|  616     LOG(LS_WARNING) << "Failed to unprotect SRTCP packet, err=" << err; |  615     LOG(LS_WARNING) << "Failed to unprotect SRTCP packet, err=" << err; | 
|  617     return false; |  616     return false; | 
|  618   } |  617   } | 
|  619   return true; |  618   return true; | 
|  620 } |  619 } | 
|  621  |  620  | 
|  622 bool SrtpSession::GetRtpAuthParams(uint8_t** key, int* key_len, int* tag_len) { |  621 bool SrtpSession::GetRtpAuthParams(uint8_t** key, int* key_len, int* tag_len) { | 
|  623 #if defined(ENABLE_EXTERNAL_AUTH) |  622 #if defined(ENABLE_EXTERNAL_AUTH) | 
|  624   RTC_DCHECK(thread_checker_.CalledOnValidThread()); |  623   RTC_DCHECK(thread_checker_.CalledOnValidThread()); | 
|  625   ExternalHmacContext* external_hmac = nullptr; |  624   ExternalHmacContext* external_hmac = nullptr; | 
| (...skipping 24 matching lines...) Expand all  Loading... | 
|  650                                            int64_t* index) { |  649                                            int64_t* index) { | 
|  651   RTC_DCHECK(thread_checker_.CalledOnValidThread()); |  650   RTC_DCHECK(thread_checker_.CalledOnValidThread()); | 
|  652   srtp_hdr_t* hdr = reinterpret_cast<srtp_hdr_t*>(p); |  651   srtp_hdr_t* hdr = reinterpret_cast<srtp_hdr_t*>(p); | 
|  653   srtp_stream_ctx_t* stream = srtp_get_stream(session_, hdr->ssrc); |  652   srtp_stream_ctx_t* stream = srtp_get_stream(session_, hdr->ssrc); | 
|  654   if (!stream) { |  653   if (!stream) { | 
|  655     return false; |  654     return false; | 
|  656   } |  655   } | 
|  657  |  656  | 
|  658   // Shift packet index, put into network byte order |  657   // Shift packet index, put into network byte order | 
|  659   *index = static_cast<int64_t>( |  658   *index = static_cast<int64_t>( | 
|  660       rtc::NetworkToHost64(rdbx_get_packet_index(&stream->rtp_rdbx) << 16)); |  659       rtc::NetworkToHost64( | 
 |  660           srtp_rdbx_get_packet_index(&stream->rtp_rdbx) << 16)); | 
|  661   return true; |  661   return true; | 
|  662 } |  662 } | 
|  663  |  663  | 
|  664 void SrtpSession::set_signal_silent_time(int signal_silent_time_in_ms) { |  664 void SrtpSession::set_signal_silent_time(int signal_silent_time_in_ms) { | 
|  665   srtp_stat_->set_signal_silent_time(signal_silent_time_in_ms); |  665   srtp_stat_->set_signal_silent_time(signal_silent_time_in_ms); | 
|  666 } |  666 } | 
|  667  |  667  | 
|  668 bool SrtpSession::SetKey(int type, int cs, const uint8_t* key, size_t len) { |  668 bool SrtpSession::SetKey(int type, int cs, const uint8_t* key, size_t len) { | 
|  669   RTC_DCHECK(thread_checker_.CalledOnValidThread()); |  669   RTC_DCHECK(thread_checker_.CalledOnValidThread()); | 
|  670   if (session_) { |  670   if (session_) { | 
|  671     LOG(LS_ERROR) << "Failed to create SRTP session: " |  671     LOG(LS_ERROR) << "Failed to create SRTP session: " | 
|  672                   << "SRTP session already created"; |  672                   << "SRTP session already created"; | 
|  673     return false; |  673     return false; | 
|  674   } |  674   } | 
|  675  |  675  | 
|  676   if (!Init()) { |  676   if (!Init()) { | 
|  677     return false; |  677     return false; | 
|  678   } |  678   } | 
|  679  |  679  | 
|  680   srtp_policy_t policy; |  680   srtp_policy_t policy; | 
|  681   memset(&policy, 0, sizeof(policy)); |  681   memset(&policy, 0, sizeof(policy)); | 
|  682   if (cs == rtc::SRTP_AES128_CM_SHA1_80) { |  682   if (cs == rtc::SRTP_AES128_CM_SHA1_80) { | 
|  683     crypto_policy_set_aes_cm_128_hmac_sha1_80(&policy.rtp); |  683     srtp_crypto_policy_set_aes_cm_128_hmac_sha1_80(&policy.rtp); | 
|  684     crypto_policy_set_aes_cm_128_hmac_sha1_80(&policy.rtcp); |  684     srtp_crypto_policy_set_aes_cm_128_hmac_sha1_80(&policy.rtcp); | 
|  685   } else if (cs == rtc::SRTP_AES128_CM_SHA1_32) { |  685   } else if (cs == rtc::SRTP_AES128_CM_SHA1_32) { | 
|  686     crypto_policy_set_aes_cm_128_hmac_sha1_32(&policy.rtp);   // rtp is 32, |  686     // RTP HMAC is shortened to 32 bits, but RTCP remains 80 bits. | 
|  687     crypto_policy_set_aes_cm_128_hmac_sha1_80(&policy.rtcp);  // rtcp still 80 |  687     srtp_crypto_policy_set_aes_cm_128_hmac_sha1_32(&policy.rtp); | 
 |  688     srtp_crypto_policy_set_aes_cm_128_hmac_sha1_80(&policy.rtcp); | 
|  688 #if !defined(ENABLE_EXTERNAL_AUTH) |  689 #if !defined(ENABLE_EXTERNAL_AUTH) | 
|  689     // TODO(jbauch): Re-enable once https://crbug.com/628400 is resolved. |  690     // TODO(jbauch): Re-enable once https://crbug.com/628400 is resolved. | 
|  690   } else if (cs == rtc::SRTP_AEAD_AES_128_GCM) { |  691   } else if (cs == rtc::SRTP_AEAD_AES_128_GCM) { | 
|  691     crypto_policy_set_aes_gcm_128_16_auth(&policy.rtp); |  692     srtp_crypto_policy_set_aes_gcm_128_16_auth(&policy.rtp); | 
|  692     crypto_policy_set_aes_gcm_128_16_auth(&policy.rtcp); |  693     srtp_crypto_policy_set_aes_gcm_128_16_auth(&policy.rtcp); | 
|  693   } else if (cs == rtc::SRTP_AEAD_AES_256_GCM) { |  694   } else if (cs == rtc::SRTP_AEAD_AES_256_GCM) { | 
|  694     crypto_policy_set_aes_gcm_256_16_auth(&policy.rtp); |  695     srtp_crypto_policy_set_aes_gcm_256_16_auth(&policy.rtp); | 
|  695     crypto_policy_set_aes_gcm_256_16_auth(&policy.rtcp); |  696     srtp_crypto_policy_set_aes_gcm_256_16_auth(&policy.rtcp); | 
|  696 #endif  // ENABLE_EXTERNAL_AUTH |  697 #endif  // ENABLE_EXTERNAL_AUTH | 
|  697   } else { |  698   } else { | 
|  698     LOG(LS_WARNING) << "Failed to create SRTP session: unsupported" |  699     LOG(LS_WARNING) << "Failed to create SRTP session: unsupported" | 
|  699                     << " cipher_suite " << cs; |  700                     << " cipher_suite " << cs; | 
|  700     return false; |  701     return false; | 
|  701   } |  702   } | 
|  702  |  703  | 
|  703   int expected_key_len; |  704   int expected_key_len; | 
|  704   int expected_salt_len; |  705   int expected_salt_len; | 
|  705   if (!rtc::GetSrtpKeyAndSaltLengths(cs, &expected_key_len, |  706   if (!rtc::GetSrtpKeyAndSaltLengths(cs, &expected_key_len, | 
|  706       &expected_salt_len)) { |  707       &expected_salt_len)) { | 
|  707     // This should never happen. |  708     // This should never happen. | 
|  708     LOG(LS_WARNING) << "Failed to create SRTP session: unsupported" |  709     LOG(LS_WARNING) << "Failed to create SRTP session: unsupported" | 
|  709                     << " cipher_suite without length information" << cs; |  710                     << " cipher_suite without length information" << cs; | 
|  710     return false; |  711     return false; | 
|  711   } |  712   } | 
|  712  |  713  | 
|  713   if (!key || |  714   if (!key || | 
|  714       len != static_cast<size_t>(expected_key_len + expected_salt_len)) { |  715       len != static_cast<size_t>(expected_key_len + expected_salt_len)) { | 
|  715     LOG(LS_WARNING) << "Failed to create SRTP session: invalid key"; |  716     LOG(LS_WARNING) << "Failed to create SRTP session: invalid key"; | 
|  716     return false; |  717     return false; | 
|  717   } |  718   } | 
|  718  |  719  | 
|  719   policy.ssrc.type = static_cast<ssrc_type_t>(type); |  720   policy.ssrc.type = static_cast<srtp_ssrc_type_t>(type); | 
|  720   policy.ssrc.value = 0; |  721   policy.ssrc.value = 0; | 
|  721   policy.key = const_cast<uint8_t*>(key); |  722   policy.key = const_cast<uint8_t*>(key); | 
|  722   // TODO(astor) parse window size from WSH session-param |  723   // TODO(astor) parse window size from WSH session-param | 
|  723   policy.window_size = 1024; |  724   policy.window_size = 1024; | 
|  724   policy.allow_repeat_tx = 1; |  725   policy.allow_repeat_tx = 1; | 
|  725   // If external authentication option is enabled, supply custom auth module |  726   // If external authentication option is enabled, supply custom auth module | 
|  726   // id EXTERNAL_HMAC_SHA1 in the policy structure. |  727   // id EXTERNAL_HMAC_SHA1 in the policy structure. | 
|  727   // We want to set this option only for rtp packets. |  728   // We want to set this option only for rtp packets. | 
|  728   // By default policy structure is initialized to HMAC_SHA1. |  729   // By default policy structure is initialized to HMAC_SHA1. | 
|  729 #if defined(ENABLE_EXTERNAL_AUTH) |  730 #if defined(ENABLE_EXTERNAL_AUTH) | 
|  730   // Enable external HMAC authentication only for outgoing streams. |  731   // Enable external HMAC authentication only for outgoing streams. | 
|  731   if (type == ssrc_any_outbound) { |  732   if (type == ssrc_any_outbound) { | 
|  732     policy.rtp.auth_type = EXTERNAL_HMAC_SHA1; |  733     policy.rtp.auth_type = EXTERNAL_HMAC_SHA1; | 
|  733   } |  734   } | 
|  734 #endif |  735 #endif | 
|  735   policy.next = nullptr; |  736   policy.next = nullptr; | 
|  736  |  737  | 
|  737   int err = srtp_create(&session_, &policy); |  738   int err = srtp_create(&session_, &policy); | 
|  738   if (err != err_status_ok) { |  739   if (err != srtp_err_status_ok) { | 
|  739     session_ = nullptr; |  740     session_ = nullptr; | 
|  740     LOG(LS_ERROR) << "Failed to create SRTP session, err=" << err; |  741     LOG(LS_ERROR) << "Failed to create SRTP session, err=" << err; | 
|  741     return false; |  742     return false; | 
|  742   } |  743   } | 
|  743  |  744  | 
|  744   srtp_set_user_data(session_, this); |  745   srtp_set_user_data(session_, this); | 
|  745   rtp_auth_tag_len_ = policy.rtp.auth_tag_len; |  746   rtp_auth_tag_len_ = policy.rtp.auth_tag_len; | 
|  746   rtcp_auth_tag_len_ = policy.rtcp.auth_tag_len; |  747   rtcp_auth_tag_len_ = policy.rtcp.auth_tag_len; | 
|  747   return true; |  748   return true; | 
|  748 } |  749 } | 
|  749  |  750  | 
|  750 bool SrtpSession::Init() { |  751 bool SrtpSession::Init() { | 
|  751   rtc::GlobalLockScope ls(&lock_); |  752   rtc::GlobalLockScope ls(&lock_); | 
|  752  |  753  | 
|  753   if (!inited_) { |  754   if (!inited_) { | 
|  754     int err; |  755     int err; | 
|  755     err = srtp_init(); |  756     err = srtp_init(); | 
|  756     if (err != err_status_ok) { |  757     if (err != srtp_err_status_ok) { | 
|  757       LOG(LS_ERROR) << "Failed to init SRTP, err=" << err; |  758       LOG(LS_ERROR) << "Failed to init SRTP, err=" << err; | 
|  758       return false; |  759       return false; | 
|  759     } |  760     } | 
|  760  |  761  | 
|  761     err = srtp_install_event_handler(&SrtpSession::HandleEventThunk); |  762     err = srtp_install_event_handler(&SrtpSession::HandleEventThunk); | 
|  762     if (err != err_status_ok) { |  763     if (err != srtp_err_status_ok) { | 
|  763       LOG(LS_ERROR) << "Failed to install SRTP event handler, err=" << err; |  764       LOG(LS_ERROR) << "Failed to install SRTP event handler, err=" << err; | 
|  764       return false; |  765       return false; | 
|  765     } |  766     } | 
|  766 #if defined(ENABLE_EXTERNAL_AUTH) |  767 #if defined(ENABLE_EXTERNAL_AUTH) | 
|  767     err = external_crypto_init(); |  768     err = external_crypto_init(); | 
|  768     if (err != err_status_ok) { |  769     if (err != srtp_err_status_ok) { | 
|  769       LOG(LS_ERROR) << "Failed to initialize fake auth, err=" << err; |  770       LOG(LS_ERROR) << "Failed to initialize fake auth, err=" << err; | 
|  770       return false; |  771       return false; | 
|  771     } |  772     } | 
|  772 #endif |  773 #endif | 
|  773     inited_ = true; |  774     inited_ = true; | 
|  774   } |  775   } | 
|  775  |  776  | 
|  776   return true; |  777   return true; | 
|  777 } |  778 } | 
|  778  |  779  | 
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  870  |  871  | 
|  871 SrtpStat::SrtpStat() |  872 SrtpStat::SrtpStat() | 
|  872     : signal_silent_time_(1000) { |  873     : signal_silent_time_(1000) { | 
|  873 } |  874 } | 
|  874  |  875  | 
|  875 void SrtpStat::AddProtectRtpResult(uint32_t ssrc, int result) { |  876 void SrtpStat::AddProtectRtpResult(uint32_t ssrc, int result) { | 
|  876   FailureKey key; |  877   FailureKey key; | 
|  877   key.ssrc = ssrc; |  878   key.ssrc = ssrc; | 
|  878   key.mode = SrtpFilter::PROTECT; |  879   key.mode = SrtpFilter::PROTECT; | 
|  879   switch (result) { |  880   switch (result) { | 
|  880     case err_status_ok: |  881     case srtp_err_status_ok: | 
|  881       key.error = SrtpFilter::ERROR_NONE; |  882       key.error = SrtpFilter::ERROR_NONE; | 
|  882       break; |  883       break; | 
|  883     case err_status_auth_fail: |  884     case srtp_err_status_auth_fail: | 
|  884       key.error = SrtpFilter::ERROR_AUTH; |  885       key.error = SrtpFilter::ERROR_AUTH; | 
|  885       break; |  886       break; | 
|  886     default: |  887     default: | 
|  887       key.error = SrtpFilter::ERROR_FAIL; |  888       key.error = SrtpFilter::ERROR_FAIL; | 
|  888   } |  889   } | 
|  889   HandleSrtpResult(key); |  890   HandleSrtpResult(key); | 
|  890 } |  891 } | 
|  891  |  892  | 
|  892 void SrtpStat::AddUnprotectRtpResult(uint32_t ssrc, int result) { |  893 void SrtpStat::AddUnprotectRtpResult(uint32_t ssrc, int result) { | 
|  893   FailureKey key; |  894   FailureKey key; | 
|  894   key.ssrc = ssrc; |  895   key.ssrc = ssrc; | 
|  895   key.mode = SrtpFilter::UNPROTECT; |  896   key.mode = SrtpFilter::UNPROTECT; | 
|  896   switch (result) { |  897   switch (result) { | 
|  897     case err_status_ok: |  898     case srtp_err_status_ok: | 
|  898       key.error = SrtpFilter::ERROR_NONE; |  899       key.error = SrtpFilter::ERROR_NONE; | 
|  899       break; |  900       break; | 
|  900     case err_status_auth_fail: |  901     case srtp_err_status_auth_fail: | 
|  901       key.error = SrtpFilter::ERROR_AUTH; |  902       key.error = SrtpFilter::ERROR_AUTH; | 
|  902       break; |  903       break; | 
|  903     case err_status_replay_fail: |  904     case srtp_err_status_replay_fail: | 
|  904     case err_status_replay_old: |  905     case srtp_err_status_replay_old: | 
|  905       key.error = SrtpFilter::ERROR_REPLAY; |  906       key.error = SrtpFilter::ERROR_REPLAY; | 
|  906       break; |  907       break; | 
|  907     default: |  908     default: | 
|  908       key.error = SrtpFilter::ERROR_FAIL; |  909       key.error = SrtpFilter::ERROR_FAIL; | 
|  909   } |  910   } | 
|  910   HandleSrtpResult(key); |  911   HandleSrtpResult(key); | 
|  911 } |  912 } | 
|  912  |  913  | 
|  913 void SrtpStat::AddProtectRtcpResult(int result) { |  914 void SrtpStat::AddProtectRtcpResult(int result) { | 
|  914   AddProtectRtpResult(0U, result); |  915   AddProtectRtpResult(0U, result); | 
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  960   SrtpNotAvailable(__FUNCTION__); |  961   SrtpNotAvailable(__FUNCTION__); | 
|  961 } |  962 } | 
|  962  |  963  | 
|  963 void SrtpStat::HandleSrtpResult(const SrtpStat::FailureKey& key) { |  964 void SrtpStat::HandleSrtpResult(const SrtpStat::FailureKey& key) { | 
|  964   SrtpNotAvailable(__FUNCTION__); |  965   SrtpNotAvailable(__FUNCTION__); | 
|  965 } |  966 } | 
|  966  |  967  | 
|  967 #endif  // HAVE_SRTP |  968 #endif  // HAVE_SRTP | 
|  968  |  969  | 
|  969 }  // namespace cricket |  970 }  // namespace cricket | 
| OLD | NEW |