shill: wimax: Update WiMAX connectable property based on credential status.

BUG=chrome-os-partner:9841
TEST=unit tests

Change-Id: I4f5d518d86b2e40d7635ee631efef6a782709d1f
Reviewed-on: https://gerrit.chromium.org/gerrit/23120
Tested-by: Darin Petkov <petkov@chromium.org>
Reviewed-by: Ben Chan <benchan@chromium.org>
Commit-Ready: Darin Petkov <petkov@chromium.org>
diff --git a/wimax_service.cc b/wimax_service.cc
index bbab451..323c1b0 100644
--- a/wimax_service.cc
+++ b/wimax_service.cc
@@ -89,7 +89,7 @@
                                             wimax_->address().c_str()));
   replace_if(
       storage_id_.begin(), storage_id_.end(), &Service::IllegalChar, '_');
-  set_connectable(true);
+  UpdateConnectable();
   return true;
 }
 
@@ -115,6 +115,25 @@
   return wimax_->GetRpcIdentifier();
 }
 
+bool WiMaxService::Is8021x() const {
+  return true;
+}
+
+void WiMaxService::set_eap(const EapCredentials &eap) {
+  Service::set_eap(eap);
+  UpdateConnectable();
+}
+
+void WiMaxService::UpdateConnectable() {
+  // Don't use Service::Is8021xConnectable because we don't support the full set
+  // of authentication methods.
+  bool is_connectable = false;
+  if (!eap().identity.empty()) {
+    is_connectable = !eap().password.empty();
+  }
+  set_connectable(is_connectable);
+}
+
 void WiMaxService::OnSignalStrengthChanged(int strength) {
   SLOG(WiMax, 2) << __func__ << "(" << strength << ")";
   SetStrength(strength);