summaryrefslogtreecommitdiffstats
path: root/remoting/protocol
diff options
context:
space:
mode:
authorsergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-09 01:14:18 +0000
committersergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-09 01:14:18 +0000
commit4232e1dcba2d44ac3e26d4bfc0de86ce09e5f1a2 (patch)
tree609263cde324d6684326a5db67f16bef6f562c40 /remoting/protocol
parent0cb9d610279419f68419492b590bbe51ce857469 (diff)
downloadchromium_src-4232e1dcba2d44ac3e26d4bfc0de86ce09e5f1a2.zip
chromium_src-4232e1dcba2d44ac3e26d4bfc0de86ce09e5f1a2.tar.gz
chromium_src-4232e1dcba2d44ac3e26d4bfc0de86ce09e5f1a2.tar.bz2
Don't use talk_base::CreateRandomString() to generate ICE credentials.
talk_base::CreateRandomString() uses NSS internally, calling PK11_GenerateRandom() and that sometimes fails. With this change remoting will use base::RandBytesAsString() to generate ICE credentials. This is mostly a workaround until we figure out why talk_base::CreateRandomString() fails. BUG=364689 Review URL: https://codereview.chromium.org/272543002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@269126 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'remoting/protocol')
-rw-r--r--remoting/protocol/libjingle_transport_factory.cc25
1 files changed, 21 insertions, 4 deletions
diff --git a/remoting/protocol/libjingle_transport_factory.cc b/remoting/protocol/libjingle_transport_factory.cc
index 35769a5..fd5ba0d 100644
--- a/remoting/protocol/libjingle_transport_factory.cc
+++ b/remoting/protocol/libjingle_transport_factory.cc
@@ -4,7 +4,9 @@
#include "remoting/protocol/libjingle_transport_factory.h"
+#include "base/base64.h"
#include "base/callback.h"
+#include "base/rand_util.h"
#include "base/single_thread_task_runner.h"
#include "base/thread_task_runner_handle.h"
#include "base/timer/timer.h"
@@ -44,6 +46,20 @@ const int kReconnectDelaySeconds = 15;
// Get fresh STUN/Relay configuration every hour.
const int kJingleInfoUpdatePeriodSeconds = 3600;
+// TODO(sergeyu): Remove this function and use talk_base::CreateRandomString()
+// when it's fixed to work reliably. See crbug.com/364689 .
+std::string CreateRandomString(int length) {
+ // Number of random bytes to generate base64 string at least |length|
+ // characters long.
+ int raw_length = (length + 1) * 3 / 4;
+ std::string base64;
+ base::Base64Encode(base::RandBytesAsString(raw_length), &base64);
+ DCHECK(static_cast<int>(base64.size()) == length ||
+ static_cast<int>(base64.size()) == length + 1);
+ base64.resize(length);
+ return base64;
+}
+
class LibjingleStreamTransport
: public StreamTransport,
public base::SupportsWeakPtr<LibjingleStreamTransport>,
@@ -126,12 +142,13 @@ LibjingleStreamTransport::LibjingleStreamTransport(
: port_allocator_(port_allocator),
network_settings_(network_settings),
event_handler_(NULL),
- ice_username_fragment_(
- talk_base::CreateRandomString(cricket::ICE_UFRAG_LENGTH)),
- ice_password_(talk_base::CreateRandomString(cricket::ICE_PWD_LENGTH)),
+ ice_username_fragment_(CreateRandomString(cricket::ICE_UFRAG_LENGTH)),
+ ice_password_(CreateRandomString(cricket::ICE_PWD_LENGTH)),
can_start_(false),
channel_was_writable_(false),
connect_attempts_left_(kMaxReconnectAttempts) {
+ DCHECK(!ice_username_fragment_.empty());
+ DCHECK(!ice_password_.empty());
}
LibjingleStreamTransport::~LibjingleStreamTransport() {
@@ -369,7 +386,7 @@ void LibjingleStreamTransport::TryReconnect() {
--connect_attempts_left_;
// Restart ICE by resetting ICE password.
- ice_password_ = talk_base::CreateRandomString(cricket::ICE_PWD_LENGTH);
+ ice_password_ = CreateRandomString(cricket::ICE_PWD_LENGTH);
channel_->SetIceCredentials(ice_username_fragment_, ice_password_);
}