Update libjingle 61901702->61966318
git-svn-id: http://webrtc.googlecode.com/svn/trunk@5596 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/talk/base/openssl.h b/talk/base/openssl.h
index e2cfd2b..d9628a7 100644
--- a/talk/base/openssl.h
+++ b/talk/base/openssl.h
@@ -30,8 +30,8 @@
#include <openssl/ssl.h>
-#if (OPENSSL_VERSION_NUMBER < 0x10001000L)
-#error OpenSSL is older than 1.0.1, which is the minimum supported version.
+#if (OPENSSL_VERSION_NUMBER < 0x10000000L)
+#error OpenSSL is older than 1.0.0, which is the minimum supported version.
#endif
#endif // TALK_BASE_OPENSSL_H_
diff --git a/talk/base/opensslstreamadapter.cc b/talk/base/opensslstreamadapter.cc
index cafef92..ba88a68 100644
--- a/talk/base/opensslstreamadapter.cc
+++ b/talk/base/opensslstreamadapter.cc
@@ -53,6 +53,11 @@
namespace talk_base {
+#if (OPENSSL_VERSION_NUMBER >= 0x10001000L)
+#define HAVE_DTLS_SRTP
+#endif
+
+#ifdef HAVE_DTLS_SRTP
// SRTP cipher suite table
struct SrtpCipherMapEntry {
const char* external_name;
@@ -65,6 +70,7 @@
{"AES_CM_128_HMAC_SHA1_32", "SRTP_AES128_CM_SHA1_32"},
{NULL, NULL}
};
+#endif
//////////////////////////////////////////////////////////////////////
// StreamBIO
@@ -238,6 +244,7 @@
bool use_context,
uint8* result,
size_t result_len) {
+#ifdef HAVE_DTLS_SRTP
int i;
i = SSL_export_keying_material(ssl_, result, result_len,
@@ -249,10 +256,14 @@
return false;
return true;
+#else
+ return false;
+#endif
}
bool OpenSSLStreamAdapter::SetDtlsSrtpCiphers(
const std::vector<std::string>& ciphers) {
+#ifdef HAVE_DTLS_SRTP
std::string internal_ciphers;
if (state_ != SSL_NONE)
@@ -283,9 +294,13 @@
srtp_ciphers_ = internal_ciphers;
return true;
+#else
+ return false;
+#endif
}
bool OpenSSLStreamAdapter::GetDtlsSrtpCipher(std::string* cipher) {
+#ifdef HAVE_DTLS_SRTP
ASSERT(state_ == SSL_CONNECTED);
if (state_ != SSL_CONNECTED)
return false;
@@ -307,6 +322,9 @@
ASSERT(false); // This should never happen
return false;
+#else
+ return false;
+#endif
}
int OpenSSLStreamAdapter::StartSSLWithServer(const char* server_name) {
@@ -737,12 +755,14 @@
SSL_CTX_set_verify_depth(ctx, 4);
SSL_CTX_set_cipher_list(ctx, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
+#ifdef HAVE_DTLS_SRTP
if (!srtp_ciphers_.empty()) {
if (SSL_CTX_set_tlsext_use_srtp(ctx, srtp_ciphers_.c_str())) {
SSL_CTX_free(ctx);
return NULL;
}
}
+#endif
return ctx;
}
@@ -820,11 +840,19 @@
}
bool OpenSSLStreamAdapter::HaveDtlsSrtp() {
+#ifdef HAVE_DTLS_SRTP
return true;
+#else
+ return false;
+#endif
}
bool OpenSSLStreamAdapter::HaveExporter() {
+#ifdef HAVE_DTLS_SRTP
return true;
+#else
+ return false;
+#endif
}
} // namespace talk_base
diff --git a/talk/media/base/constants.cc b/talk/media/base/constants.cc
index a8a0da7..72ea043 100644
--- a/talk/media/base/constants.cc
+++ b/talk/media/base/constants.cc
@@ -96,4 +96,7 @@
const char kComfortNoiseCodecName[] = "CN";
+const char kRtpAbsoluteSendTimeHeaderExtension[] =
+ "http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time";
+
} // namespace cricket
diff --git a/talk/media/base/constants.h b/talk/media/base/constants.h
index 5414db5..5f123ff 100644
--- a/talk/media/base/constants.h
+++ b/talk/media/base/constants.h
@@ -116,6 +116,10 @@
extern const char kComfortNoiseCodecName[];
+// Extension header for absolute send time, see url for details:
+// http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
+extern const char kRtpAbsoluteSendTimeHeaderExtension[];
+
} // namespace cricket
#endif // TALK_MEDIA_BASE_CONSTANTS_H_
diff --git a/talk/media/base/videoadapter.cc b/talk/media/base/videoadapter.cc
index dc672bb..f197995 100644
--- a/talk/media/base/videoadapter.cc
+++ b/talk/media/base/videoadapter.cc
@@ -211,6 +211,12 @@
}
}
+void CoordinatedVideoAdapter::set_cpu_smoothing(bool enable) {
+ LOG(LS_INFO) << "CPU smoothing is now "
+ << (enable ? "enabled" : "disabled");
+ cpu_smoothing_ = enable;
+}
+
void VideoAdapter::SetOutputFormat(const VideoFormat& format) {
talk_base::CritScope cs(&critical_section_);
int64 old_output_interval = output_format_.interval;
@@ -361,6 +367,12 @@
return true;
}
+void VideoAdapter::set_scale_third(bool enable) {
+ LOG(LS_INFO) << "Video Adapter third scaling is now "
+ << (enable ? "enabled" : "disabled");
+ scale_third_ = enable;
+}
+
// Scale or Blacken the frame. Returns true if successful.
bool VideoAdapter::StretchToOutputFrame(const VideoFrame* in_frame) {
int output_width = output_format_.width;
@@ -481,6 +493,48 @@
<< " To: " << new_width << "x" << new_height;
}
+void CoordinatedVideoAdapter::set_cpu_load_min_samples(
+ int cpu_load_min_samples) {
+ if (cpu_load_min_samples_ != cpu_load_min_samples) {
+ LOG(LS_INFO) << "VAdapt Change Cpu Adapt Min Samples from: "
+ << cpu_load_min_samples_ << " to "
+ << cpu_load_min_samples;
+ cpu_load_min_samples_ = cpu_load_min_samples;
+ }
+}
+
+void CoordinatedVideoAdapter::set_high_system_threshold(
+ float high_system_threshold) {
+ ASSERT(high_system_threshold <= 1.0f);
+ ASSERT(high_system_threshold >= 0.0f);
+ if (high_system_threshold_ != high_system_threshold) {
+ LOG(LS_INFO) << "VAdapt Change High System Threshold from: "
+ << high_system_threshold_ << " to " << high_system_threshold;
+ high_system_threshold_ = high_system_threshold;
+ }
+}
+
+void CoordinatedVideoAdapter::set_low_system_threshold(
+ float low_system_threshold) {
+ ASSERT(low_system_threshold <= 1.0f);
+ ASSERT(low_system_threshold >= 0.0f);
+ if (low_system_threshold_ != low_system_threshold) {
+ LOG(LS_INFO) << "VAdapt Change Low System Threshold from: "
+ << low_system_threshold_ << " to " << low_system_threshold;
+ low_system_threshold_ = low_system_threshold;
+ }
+}
+
+void CoordinatedVideoAdapter::set_process_threshold(float process_threshold) {
+ ASSERT(process_threshold <= 1.0f);
+ ASSERT(process_threshold >= 0.0f);
+ if (process_threshold_ != process_threshold) {
+ LOG(LS_INFO) << "VAdapt Change High Process Threshold from: "
+ << process_threshold_ << " to " << process_threshold;
+ process_threshold_ = process_threshold;
+ }
+}
+
// A Bandwidth GD request for new resolution
void CoordinatedVideoAdapter::OnEncoderResolutionRequest(
int width, int height, AdaptRequest request) {
diff --git a/talk/media/base/videoadapter.h b/talk/media/base/videoadapter.h
index 70d4da7..98c64d6 100644
--- a/talk/media/base/videoadapter.h
+++ b/talk/media/base/videoadapter.h
@@ -28,7 +28,6 @@
#include "talk/base/common.h" // For ASSERT
#include "talk/base/criticalsection.h"
-#include "talk/base/logging.h"
#include "talk/base/scoped_ptr.h"
#include "talk/base/sigslot.h"
#include "talk/media/base/videocommon.h"
@@ -64,11 +63,7 @@
// the output frame.
bool AdaptFrame(const VideoFrame* in_frame, VideoFrame** out_frame);
- void set_scale_third(bool enable) {
- LOG(LS_INFO) << "Video Adapter third scaling is now "
- << (enable ? "enabled" : "disabled");
- scale_third_ = enable;
- }
+ void set_scale_third(bool enable);
bool scale_third() const { return scale_third_; }
protected:
@@ -129,11 +124,7 @@
// Enable or disable smoothing when doing CPU adaptation. When smoothing is
// enabled, system CPU load is tracked using an exponential weighted
// average.
- void set_cpu_smoothing(bool enable) {
- LOG(LS_INFO) << "CPU smoothing is now "
- << (enable ? "enabled" : "disabled");
- cpu_smoothing_ = enable;
- }
+ void set_cpu_smoothing(bool enable);
bool cpu_smoothing() const { return cpu_smoothing_; }
// Enable or disable video adaptation due to the change of the GD
void set_gd_adaptation(bool enable) { gd_adaptation_ = enable; }
@@ -151,47 +142,16 @@
// When the video is decreased, set the waiting time for CPU adaptation to
// decrease video again.
- void set_cpu_load_min_samples(int cpu_load_min_samples) {
- if (cpu_load_min_samples_ != cpu_load_min_samples) {
- LOG(LS_INFO) << "VAdapt Change Cpu Adapt Min Samples from: "
- << cpu_load_min_samples_ << " to "
- << cpu_load_min_samples;
- cpu_load_min_samples_ = cpu_load_min_samples;
- }
- }
+ void set_cpu_load_min_samples(int cpu_load_min_samples);
int cpu_load_min_samples() const { return cpu_load_min_samples_; }
// CPU system load high threshold for reducing resolution. e.g. 0.85f
- void set_high_system_threshold(float high_system_threshold) {
- ASSERT(high_system_threshold <= 1.0f);
- ASSERT(high_system_threshold >= 0.0f);
- if (high_system_threshold_ != high_system_threshold) {
- LOG(LS_INFO) << "VAdapt Change High System Threshold from: "
- << high_system_threshold_ << " to " << high_system_threshold;
- high_system_threshold_ = high_system_threshold;
- }
- }
+ void set_high_system_threshold(float high_system_threshold);
float high_system_threshold() const { return high_system_threshold_; }
// CPU system load low threshold for increasing resolution. e.g. 0.70f
- void set_low_system_threshold(float low_system_threshold) {
- ASSERT(low_system_threshold <= 1.0f);
- ASSERT(low_system_threshold >= 0.0f);
- if (low_system_threshold_ != low_system_threshold) {
- LOG(LS_INFO) << "VAdapt Change Low System Threshold from: "
- << low_system_threshold_ << " to " << low_system_threshold;
- low_system_threshold_ = low_system_threshold;
- }
- }
+ void set_low_system_threshold(float low_system_threshold);
float low_system_threshold() const { return low_system_threshold_; }
// CPU process load threshold for reducing resolution. e.g. 0.10f
- void set_process_threshold(float process_threshold) {
- ASSERT(process_threshold <= 1.0f);
- ASSERT(process_threshold >= 0.0f);
- if (process_threshold_ != process_threshold) {
- LOG(LS_INFO) << "VAdapt Change High Process Threshold from: "
- << process_threshold_ << " to " << process_threshold;
- process_threshold_ = process_threshold;
- }
- }
+ void set_process_threshold(float process_threshold);
float process_threshold() const { return process_threshold_; }
// Handle the format request from the server via Jingle update message.
diff --git a/talk/media/webrtc/webrtcvideoengine.cc b/talk/media/webrtc/webrtcvideoengine.cc
index f096ac5..72432f1 100644
--- a/talk/media/webrtc/webrtcvideoengine.cc
+++ b/talk/media/webrtc/webrtcvideoengine.cc
@@ -152,10 +152,7 @@
"urn:ietf:params:rtp-hdrext:toffset";
static const int kRtpTimeOffsetExtensionId = 2;
-// Extension header for absolute send time, see url for details:
-// http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
-static const char kRtpAbsoluteSendTimeHeaderExtension[] =
- "http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time";
+// Extension header ID for absolute send time. Url defined in constants.cc
static const int kRtpAbsoluteSendTimeExtensionId = 3;
// Default video dscp value.
// See http://tools.ietf.org/html/rfc2474 for details
diff --git a/talk/session/media/channel.cc b/talk/session/media/channel.cc
index 6c0233f..fb328e2 100644
--- a/talk/session/media/channel.cc
+++ b/talk/session/media/channel.cc
@@ -33,6 +33,7 @@
#include "talk/base/common.h"
#include "talk/base/dscp.h"
#include "talk/base/logging.h"
+#include "talk/media/base/constants.h"
#include "talk/media/base/rtputils.h"
#include "talk/p2p/base/transportchannel.h"
#include "talk/session/media/channelmanager.h"
@@ -186,7 +187,8 @@
remote_content_direction_(MD_INACTIVE),
has_received_packet_(false),
dtls_keyed_(false),
- secure_required_(false) {
+ secure_required_(false),
+ rtp_abs_sendtime_extn_id_(-1) {
ASSERT(worker_thread_ == talk_base::Thread::Current());
LOG(LS_INFO) << "Created channel for " << content_name;
}
@@ -462,14 +464,40 @@
SignalSendPacketPreCrypto(packet->data(), packet->length(), rtcp);
}
+ talk_base::PacketOptions options(dscp);
+ options.packet_time_params.rtp_sendtime_extension_id =
+ rtp_abs_sendtime_extn_id_;
// Protect if needed.
if (srtp_filter_.IsActive()) {
bool res;
char* data = packet->data();
int len = static_cast<int>(packet->length());
if (!rtcp) {
- res = srtp_filter_.ProtectRtp(data, len,
- static_cast<int>(packet->capacity()), &len);
+ // If ENABLE_EXTERNAL_AUTH flag is on then packet authentication is not done
+ // inside libsrtp for a RTP packet. A external HMAC module will be writing
+ // a fake HMAC value. This is ONLY done for a RTP packet.
+ // Socket layer will update rtp sendtime extension header if present in
+ // packet with current time before updating the HMAC.
+#if !defined(ENABLE_EXTERNAL_AUTH)
+ res = srtp_filter_.ProtectRtp(
+ data, len, static_cast<int>(packet->capacity()), &len);
+#else
+ res = srtp_filter_.ProtectRtp(
+ data, len, static_cast<int>(packet->capacity()), &len,
+ &options.packet_time_params.srtp_packet_index);
+ // If protection succeeds, let's get auth params from srtp.
+ if (res) {
+ uint8* auth_key = NULL;
+ int key_len;
+ res = srtp_filter_.GetRtpAuthParams(
+ &auth_key, &key_len, &options.packet_time_params.srtp_auth_tag_len);
+ if (res) {
+ options.packet_time_params.srtp_auth_key.resize(key_len);
+ options.packet_time_params.srtp_auth_key.assign(auth_key,
+ auth_key + key_len);
+ }
+ }
+#endif
if (!res) {
int seq_num = -1;
uint32 ssrc = 0;
@@ -511,7 +539,6 @@
}
// Bon voyage.
- talk_base::PacketOptions options(dscp);
int ret = channel->SendPacket(packet->data(), packet->length(), options,
(secure() && secure_dtls()) ? PF_SRTP_BYPASS : 0);
if (ret != static_cast<int>(packet->length())) {
@@ -1170,6 +1197,8 @@
<< MediaTypeToString(content->type()) << " content.";
SafeSetError(desc.str(), error_desc);
ret = false;
+ } else {
+ MaybeCacheRtpAbsSendTimeHeaderExtension(content->rtp_header_extensions());
}
}
@@ -1184,6 +1213,14 @@
return ret;
}
+void BaseChannel::MaybeCacheRtpAbsSendTimeHeaderExtension(
+ const std::vector<RtpHeaderExtension>& extensions) {
+ const RtpHeaderExtension* send_time_extension =
+ FindHeaderExtension(extensions, kRtpAbsoluteSendTimeHeaderExtension);
+ rtp_abs_sendtime_extn_id_ =
+ send_time_extension ? send_time_extension->id : -1;
+}
+
void BaseChannel::OnMessage(talk_base::Message *pmsg) {
switch (pmsg->message_id) {
case MSG_RTPPACKET:
diff --git a/talk/session/media/channel.h b/talk/session/media/channel.h
index 5a69fed..2896bce 100644
--- a/talk/session/media/channel.h
+++ b/talk/session/media/channel.h
@@ -319,6 +319,11 @@
ContentAction action,
std::string* error_desc) = 0;
+ // Helper method to get RTP Absoulute SendTime extension header id if
+ // present in remote supported extensions list.
+ void MaybeCacheRtpAbsSendTimeHeaderExtension(
+ const std::vector<RtpHeaderExtension>& extensions);
+
bool CheckSrtpConfig(const std::vector<CryptoParams>& cryptos,
bool* dtls,
std::string* error_desc);
@@ -380,6 +385,7 @@
bool has_received_packet_;
bool dtls_keyed_;
bool secure_required_;
+ int rtp_abs_sendtime_extn_id_;
};
// VoiceChannel is a specialization that adds support for early media, DTMF,
diff --git a/talk/session/media/externalhmac.cc b/talk/session/media/externalhmac.cc
index d5cfc95..69d44b6 100644
--- a/talk/session/media/externalhmac.cc
+++ b/talk/session/media/externalhmac.cc
@@ -33,7 +33,7 @@
#include "third_party/libsrtp/include/srtp.h"
#endif // SRTP_RELATIVE_PATH
-#include "talk/session/media/external_hmac.h"
+#include "talk/session/media/externalhmac.h"
#include "talk/base/logging.h"
diff --git a/talk/session/media/srtpfilter.cc b/talk/session/media/srtpfilter.cc
index 2f14268..2e8c5f2 100644
--- a/talk/session/media/srtpfilter.cc
+++ b/talk/session/media/srtpfilter.cc
@@ -52,7 +52,7 @@
#include "third_party/libsrtp/include/srtp_priv.h"
#endif // SRTP_RELATIVE_PATH
#ifdef ENABLE_EXTERNAL_AUTH
-#include "talk/session/media/external_hmac.h"
+#include "talk/session/media/externalhmac.h"
#endif // ENABLE_EXTERNAL_AUTH
#ifdef _DEBUG
extern "C" debug_module_t mod_srtp;
diff --git a/talk/xmpp/constants.cc b/talk/xmpp/constants.cc
index b1febd8..39d06b4 100644
--- a/talk/xmpp/constants.cc
+++ b/talk/xmpp/constants.cc
@@ -118,6 +118,7 @@
const char STR_MUC_ROOM_FEATURE_HANGOUT_LITE[] = "muc_lite";
const char STR_MUC_ROOM_FEATURE_BROADCAST[] = "broadcast";
const char STR_MUC_ROOM_FEATURE_MULTI_USER_VC[] = "muc_muvc";
+const char STR_MUC_ROOM_FEATURE_RECORDABLE[] = "recordable";
const char STR_MUC_ROOM_OWNER_PROFILE_ID[] = "muc#roominfo_owner_profile_id";
const char STR_ID_TYPE_CONVERSATION[] = "conversation";
diff --git a/talk/xmpp/constants.h b/talk/xmpp/constants.h
index 2533e1e..d4cdd8c 100644
--- a/talk/xmpp/constants.h
+++ b/talk/xmpp/constants.h
@@ -111,6 +111,7 @@
extern const char STR_MUC_ROOM_FEATURE_HANGOUT_LITE[];
extern const char STR_MUC_ROOM_FEATURE_BROADCAST[];
extern const char STR_MUC_ROOM_FEATURE_MULTI_USER_VC[];
+extern const char STR_MUC_ROOM_FEATURE_RECORDABLE[];
extern const char STR_MUC_ROOM_OWNER_PROFILE_ID[];
extern const char STR_ID_TYPE_CONVERSATION[];