shill: Register GSM modem as part of device start up.

BUG=chromium-os:19676
TEST=unit tests, tested on device

Change-Id: Ie8f8a8ce4fd185226a9f55f4fcd62224e7318c3c
Reviewed-on: http://gerrit.chromium.org/gerrit/6683
Tested-by: Darin Petkov <petkov@chromium.org>
Reviewed-by: Paul Stewart <pstew@chromium.org>
diff --git a/cellular.cc b/cellular.cc
index 6883366..7a1825a 100644
--- a/cellular.cc
+++ b/cellular.cc
@@ -163,9 +163,9 @@
       allow_roaming_(false),
       scanning_(false),
       scan_interval_(0) {
+  store_.RegisterConstString(flimflam::kCarrierProperty, &carrier_);
   store_.RegisterConstString(flimflam::kDBusConnectionProperty, &dbus_owner_);
   store_.RegisterConstString(flimflam::kDBusObjectProperty, &dbus_path_);
-  store_.RegisterConstString(flimflam::kCarrierProperty, &carrier_);
   store_.RegisterBool(flimflam::kCellularAllowRoamingProperty, &allow_roaming_);
   store_.RegisterConstString(flimflam::kEsnProperty, &esn_);
   store_.RegisterConstString(flimflam::kFirmwareRevisionProperty,
@@ -182,6 +182,8 @@
   store_.RegisterConstString(flimflam::kMinProperty, &min_);
   store_.RegisterConstString(flimflam::kModelIDProperty, &model_id_);
   store_.RegisterConstUint16(flimflam::kPRLVersionProperty, &cdma_.prl_version);
+  store_.RegisterConstString(flimflam::kSelectedNetworkProperty,
+                             &selected_network_);
 
   HelpRegisterDerivedStrIntPair(flimflam::kSIMLockStatusProperty,
                                 &Cellular::SimLockStatusToProperty,
@@ -351,7 +353,9 @@
           dbus_path_, dbus_owner_));
   switch (type_) {
     case kTypeGSM:
-      NOTIMPLEMENTED();
+      gsm_network_proxy_.reset(
+          ProxyFactory::factory()->CreateModemGSMNetworkProxy(
+              this, dbus_path_, dbus_owner_));
       break;
     case kTypeCDMA:
       cdma_proxy_.reset(
@@ -419,8 +423,10 @@
 }
 
 void Cellular::RegisterGSMModem() {
-  // TODO(petkov): Invoke ModemManager.Modem.Gsm.Network.Register.
-  NOTIMPLEMENTED();
+  LOG(INFO) << "Registering on: "
+            << (selected_network_.empty() ? "home network" : selected_network_);
+  // TODO(petkov): Switch to asynchronous calls (crosbug.com/17583).
+  gsm_network_proxy_->Register(selected_network_);
 }
 
 void Cellular::GetModemInfo() {
@@ -712,6 +718,23 @@
   HandleNewSignalQuality(strength);
 }
 
+void Cellular::OnGSMNetworkModeChanged(uint32 mode) {
+  // TODO(petkov): Implement this.
+  NOTIMPLEMENTED();
+}
+
+void Cellular::OnGSMRegistrationInfoChanged(uint32 status,
+                                            const string &operator_code,
+                                            const string &operator_name) {
+  // TODO(petkov): Implement this.
+  NOTIMPLEMENTED();
+}
+
+void Cellular::OnGSMSignalQualityChanged(uint32 quality) {
+  // TODO(petkov): Implement this.
+  NOTIMPLEMENTED();
+}
+
 void Cellular::OnModemStateChanged(uint32 old_state,
                                    uint32 new_state,
                                    uint32 reason) {