shill: Propagate Cellular Activate call errors to the DBus caller.
BUG=chromium-os:19547
TEST=unit tests
Change-Id: I2a0f889f0863c299c3f3ac006a6df5a608407881
Reviewed-on: http://gerrit.chromium.org/gerrit/6616
Reviewed-by: Darin Petkov <petkov@chromium.org>
Tested-by: Darin Petkov <petkov@chromium.org>
diff --git a/cellular.cc b/cellular.cc
index 20cf129..0a2ea86 100644
--- a/cellular.cc
+++ b/cellular.cc
@@ -632,8 +632,22 @@
}
}
-void Cellular::Activate(const string &carrier) {
- CHECK_EQ(kTypeCDMA, type_);
+void Cellular::Activate(const string &carrier, Error *error) {
+ if (type_ != kTypeCDMA) {
+ const string kMessage = "Unable to activate non-CDMA modem.";
+ LOG(ERROR) << kMessage;
+ CHECK(error);
+ error->Populate(Error::kInvalidArguments, kMessage);
+ return;
+ }
+ if (state_ != kStateEnabled &&
+ state_ != kStateRegistered) {
+ const string kMessage = "Unable to activate in " + GetStateString(state_);
+ LOG(ERROR) << kMessage;
+ CHECK(error);
+ error->Populate(Error::kInvalidArguments, kMessage);
+ return;
+ }
// Defer connect because we may be in a dbus-c++ callback.
dispatcher_->PostTask(
task_factory_.NewRunnableMethod(&Cellular::ActivateTask, carrier));
@@ -641,7 +655,8 @@
void Cellular::ActivateTask(const string &carrier) {
VLOG(2) << __func__ << "(" << carrier << ")";
- if (state_ != kStateEnabled && state_ != kStateRegistered) {
+ if (state_ != kStateEnabled &&
+ state_ != kStateRegistered) {
LOG(ERROR) << "Unable to activate in " << GetStateString(state_);
return;
}