summaryrefslogtreecommitdiffstats
path: root/remoting/protocol/pairing_registry.cc
diff options
context:
space:
mode:
Diffstat (limited to 'remoting/protocol/pairing_registry.cc')
-rw-r--r--remoting/protocol/pairing_registry.cc67
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