diff options
Diffstat (limited to 'remoting/protocol/pairing_registry.cc')
-rw-r--r-- | remoting/protocol/pairing_registry.cc | 67 |
1 files changed, 49 insertions, 18 deletions
diff --git a/remoting/protocol/pairing_registry.cc b/remoting/protocol/pairing_registry.cc index 10098b0..6c9cc66 100644 --- a/remoting/protocol/pairing_registry.cc +++ b/remoting/protocol/pairing_registry.cc @@ -12,35 +12,63 @@ namespace remoting { namespace protocol { -// How many bytes of random data to use for the client id and shared secret. +// How many bytes of random data to use for the shared secret. const int kKeySize = 16; -PairingRegistry::PairingRegistry(scoped_ptr<Delegate> delegate) - : delegate_(delegate.Pass()) { - DCHECK(delegate_); +PairingRegistry::Pairing::Pairing() { } -PairingRegistry::~PairingRegistry() { +PairingRegistry::Pairing::Pairing(const base::Time& created_time, + const std::string& client_name, + const std::string& client_id, + const std::string& shared_secret) + : created_time_(created_time), + client_name_(client_name), + client_id_(client_id), + shared_secret_(shared_secret) { } -PairingRegistry::Pairing PairingRegistry::CreatePairing( +PairingRegistry::Pairing PairingRegistry::Pairing::Create( const std::string& client_name) { - DCHECK(CalledOnValidThread()); - - Pairing result; - result.client_name = client_name; - result.client_id = base::GenerateGUID(); - - // Create a random shared secret to authenticate this client. + base::Time created_time = base::Time::Now(); + std::string client_id = base::GenerateGUID(); + std::string shared_secret; char buffer[kKeySize]; crypto::RandBytes(buffer, arraysize(buffer)); if (!base::Base64Encode(base::StringPiece(buffer, arraysize(buffer)), - &result.shared_secret)) { + &shared_secret)) { LOG(FATAL) << "Base64Encode failed."; } + return Pairing(created_time, client_name, client_id, shared_secret); +} + +PairingRegistry::Pairing::~Pairing() { +} + +bool PairingRegistry::Pairing::operator==(const Pairing& other) const { + return created_time_ == other.created_time_ && + client_id_ == other.client_id_ && + client_name_ == other.client_name_ && + shared_secret_ == other.shared_secret_; +} + +bool PairingRegistry::Pairing::is_valid() const { + return !client_id_.empty() && !shared_secret_.empty(); +} + +PairingRegistry::PairingRegistry(scoped_ptr<Delegate> delegate) + : delegate_(delegate.Pass()) { + DCHECK(delegate_); +} + +PairingRegistry::~PairingRegistry() { +} - // Save the result via the Delegate and return it to the caller. - delegate_->AddPairing(result); +PairingRegistry::Pairing PairingRegistry::CreatePairing( + const std::string& client_name) { + DCHECK(CalledOnValidThread()); + Pairing result = Pairing::Create(client_name); + delegate_->AddPairing(result, AddPairingCallback()); return result; } @@ -51,8 +79,12 @@ void PairingRegistry::GetPairing(const std::string& client_id, } void NotImplementedPairingRegistryDelegate::AddPairing( - const PairingRegistry::Pairing& new_paired_client) { + const PairingRegistry::Pairing& new_paired_client, + const PairingRegistry::AddPairingCallback& callback) { NOTIMPLEMENTED(); + if (!callback.is_null()) { + callback.Run(false); + } } void NotImplementedPairingRegistryDelegate::GetPairing( @@ -62,6 +94,5 @@ void NotImplementedPairingRegistryDelegate::GetPairing( callback.Run(PairingRegistry::Pairing()); } - } // namespace protocol } // namespace remoting |