diff options
author | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-09 01:14:18 +0000 |
---|---|---|
committer | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-09 01:14:18 +0000 |
commit | 4232e1dcba2d44ac3e26d4bfc0de86ce09e5f1a2 (patch) | |
tree | 609263cde324d6684326a5db67f16bef6f562c40 /remoting/protocol | |
parent | 0cb9d610279419f68419492b590bbe51ce857469 (diff) | |
download | chromium_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.cc | 25 |
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_); } |