Fail setup/start if device already registered Previously device didn't check condition until wifi is switched. Bug we can detect the issue and reply to client in the same request. BUG: 27432528 Change-Id: I6564c47fba86671dbd59dc0ff70cfba3a25d60dc Reviewed-on: https://weave-review.googlesource.com/2890 Reviewed-by: Alex Vakulenko <avakulenko@google.com>
diff --git a/examples/daemon/common/daemon.h b/examples/daemon/common/daemon.h index 22591a2..23a08d2 100644 --- a/examples/daemon/common/daemon.h +++ b/examples/daemon/common/daemon.h
@@ -114,10 +114,8 @@ private: static void OnRegisterDeviceDone(weave::Device* device, weave::ErrorPtr error) { - if (error) - LOG(ERROR) << "Fail to register device: " << error->GetMessage(); - else - LOG(INFO) << "Device registered: " << device->GetSettings().cloud_id; + CHECK(!error) << "Registration failed device: " << error->GetMessage(); + LOG(INFO) << "Device registered: " << device->GetSettings().cloud_id; } std::unique_ptr<weave::examples::EventTaskRunner> task_runner_;
diff --git a/src/device_registration_info.h b/src/device_registration_info.h index a488bae..db08ef9 100644 --- a/src/device_registration_info.h +++ b/src/device_registration_info.h
@@ -115,6 +115,9 @@ GcdState GetGcdState() const { return gcd_state_; } + // Checks whether we have credentials generated during registration. + bool HaveRegistrationCredentials() const; + private: friend class DeviceRegistrationInfoTest; @@ -124,8 +127,6 @@ return weak_factory_.GetWeakPtr(); } - // Checks whether we have credentials generated during registration. - bool HaveRegistrationCredentials() const; // Calls HaveRegistrationCredentials() and logs an error if no credentials // are available. bool VerifyRegistrationCredentials(ErrorPtr* error) const;
diff --git a/src/privet/cloud_delegate.cc b/src/privet/cloud_delegate.cc index ef9c59e..d7e9bef 100644 --- a/src/privet/cloud_delegate.cc +++ b/src/privet/cloud_delegate.cc
@@ -26,6 +26,8 @@ namespace { +const char kErrorAlreayRegistered[] = "already_registered"; + const BackoffEntry::Policy register_backoff_policy = {0, 1000, 2.0, 0.2, 5000, -1, false}; @@ -103,6 +105,12 @@ bool Setup(const RegistrationData& registration_data, ErrorPtr* error) override { VLOG(1) << "GCD Setup started. "; + if (device_->HaveRegistrationCredentials()) { + Error::AddTo(error, FROM_HERE, kErrorAlreayRegistered, + "Unable to register already registered device"); + return false; + } + // Set (or reset) the retry counter, since we are starting a new // registration process. registation_retry_count_ = kMaxDeviceRegistrationRetries;
diff --git a/src/privet/privet_handler.cc b/src/privet/privet_handler.cc index 97cacc5..41936b6 100644 --- a/src/privet/privet_handler.cc +++ b/src/privet/privet_handler.cc
@@ -837,8 +837,9 @@ return ReturnError(*error, callback); if (!registration_data.ticket_id.empty() && - !cloud_->Setup(registration_data, &error)) + !cloud_->Setup(registration_data, &error)) { return ReturnError(*error, callback); + } ReplyWithSetupStatus(callback); }