shill: Support for GSM network scanning.

This is mostly placeholder code since synchronous calls will cause crashes due
to timeouts.

BUG=chromium-os:19805
TEST=unit tests

Change-Id: I7ad07d6274b19b39d7955ee256c6928c9f1ce5a1
Reviewed-on: http://gerrit.chromium.org/gerrit/7895
Commit-Ready: Darin Petkov <petkov@chromium.org>
Reviewed-by: Darin Petkov <petkov@chromium.org>
Tested-by: Darin Petkov <petkov@chromium.org>
diff --git a/cellular.h b/cellular.h
index 900536e..0046238 100644
--- a/cellular.h
+++ b/cellular.h
@@ -91,34 +91,6 @@
     DISALLOW_COPY_AND_ASSIGN(Operator);
   };
 
-  class Network {
-   public:
-    Network();
-    ~Network();
-
-    const std::string &GetStatus() const;
-    void SetStatus(const std::string &status);
-
-    const std::string &GetId() const;
-    void SetId(const std::string &id);
-
-    const std::string &GetShortName() const;
-    void SetShortName(const std::string &name);
-
-    const std::string &GetLongName() const;
-    void SetLongName(const std::string &name);
-
-    const std::string &GetTechnology() const;
-    void SetTechnology(const std::string &technology);
-
-    const Stringmap &ToDict() const;
-
-   private:
-    Stringmap dict_;
-
-    DISALLOW_COPY_AND_ASSIGN(Network);
-  };
-
   struct SimLockStatus {
    public:
     SimLockStatus() : retries_left(0) {}
@@ -167,6 +139,7 @@
   virtual void Stop();
   virtual bool TechnologyIs(Technology type) const;
   virtual void LinkEvent(unsigned int flags, unsigned int change);
+  virtual void Scan(Error *error);
   virtual void RegisterOnNetwork(const std::string &network_id, Error *error);
   virtual void RequirePIN(const std::string &pin, bool require, Error *error);
   virtual void EnterPIN(const std::string &pin, Error *error);
@@ -203,11 +176,13 @@
   FRIEND_TEST(CellularTest, EnterPINError);
   FRIEND_TEST(CellularTest, InitProxiesCDMA);
   FRIEND_TEST(CellularTest, InitProxiesGSM);
+  FRIEND_TEST(CellularTest, ParseScanResult);
   FRIEND_TEST(CellularTest, RegisterOnNetwork);
   FRIEND_TEST(CellularTest, RegisterOnNetworkError);
   FRIEND_TEST(CellularTest, RequirePIN);
   FRIEND_TEST(CellularTest, RequirePINError);
   FRIEND_TEST(CellularTest, SetGSMAccessTechnology);
+  FRIEND_TEST(CellularTest, Scan);
   FRIEND_TEST(CellularTest, StartConnected);
   FRIEND_TEST(CellularTest, StartCDMARegister);
   FRIEND_TEST(CellularTest, StartGSMRegister);
@@ -237,12 +212,18 @@
     std::string spn;
   };
 
+  static const char kNetworkPropertyAccessTechnology[];
+  static const char kNetworkPropertyID[];
+  static const char kNetworkPropertyLongName[];
+  static const char kNetworkPropertyShortName[];
+  static const char kNetworkPropertyStatus[];
   static const char kPhoneNumberCDMA[];
   static const char kPhoneNumberGSM[];
 
   void SetState(State state);
 
   void ConnectTask(const DBusPropertiesMap &properties);
+  void ScanTask();
   void ActivateTask(const std::string &carrier);
   void RegisterOnNetworkTask(const std::string &network_id);
   void RequirePINTask(const std::string &pin, bool require);
@@ -256,7 +237,6 @@
 
   StrIntPair SimLockStatusToProperty();
 
-  Stringmaps EnumerateNetworks();
   void HelpRegisterDerivedStringmaps(const std::string &name,
                                      Stringmaps(Cellular::*get)(void),
                                      bool(Cellular::*set)(const Stringmaps&));
@@ -310,6 +290,9 @@
 
   void HandleNewCDMAActivationState(uint32 error);
 
+  Stringmap ParseScanResult(
+      const ModemGSMNetworkProxyInterface::ScanResult &result);
+
   // Signal callbacks inherited from ModemCDMAProxyListener.
   virtual void OnCDMAActivationStateChanged(
       uint32 activation_state,
@@ -366,7 +349,7 @@
   bool scanning_;
   uint16 scan_interval_;
   std::string selected_network_;
-  std::vector<Network> found_networks_;
+  Stringmaps found_networks_;
   SimLockStatus sim_lock_status_;
   Operator home_provider_;