| // Copyright (c) 2013 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SHILL_PENDING_ACTIVATION_STORE_H_ |
| #define SHILL_PENDING_ACTIVATION_STORE_H_ |
| |
| #include <string> |
| |
| #include <base/file_path.h> |
| #include <base/memory/scoped_ptr.h> |
| #include <gtest/gtest_prod.h> // for FRIEND_TEST |
| |
| #include "shill/key_file_store.h" |
| |
| namespace shill { |
| |
| class GLib; |
| class StoreInterface; |
| |
| // PendingActivationStore stores the network activation status for a |
| // particular SIM. Once an online payment for the activation of a 3GPP |
| // network is successful, the associated SIM is regarded as pending |
| // activation and stored in the persistent profile. Once shill knows that |
| // the activation associated with a particular SIM is successful, it is removed |
| // from the profile and the cellular service is marked as activated. |
| class PendingActivationStore { |
| public: |
| enum State { |
| // This state indicates that information for a particular SIM was never |
| // stored in this database. |
| kStateUnknown, |
| // This state indicates that an online payment has been made but the modem |
| // has not yet been able to register with the network. |
| kStatePending, |
| // This state indicates that the modem has registered with the network but |
| // the network has not yet confirmed that the service has been activated. |
| // Currently, shill knows that activation has gone through, when a non-zero |
| // MDN has been received OTA. |
| kStateActivated, |
| // This state indicates that a timeout has expired in which the modem |
| // failed to register to a network. |
| kStatePendingTimeout, |
| kStateMax, |
| }; |
| |
| enum IdentifierType { |
| kIdentifierICCID, |
| kIdentifierMEID, |
| }; |
| |
| // Constructor performs no initialization. |
| PendingActivationStore(); |
| virtual ~PendingActivationStore(); |
| |
| // Tries to open the underlying store interface from the given file path. |
| // Returns false if it fails to open the file. |
| // |
| // If called more than once on the same instance, the file that was already |
| // open will allways be flushed and closed, however it is not guaranteed that |
| // the file will always be successfully reopened (technically it should, but |
| // it is not guaranteed). |
| virtual bool InitStorage(GLib *glib, const base::FilePath &storage_path); |
| |
| // Returns the activation state for a SIM with the given identifier. A return |
| // value of kStateUnknown indicates that the given identifier was not found. |
| virtual State GetActivationState(IdentifierType type, |
| const std::string &identifier) const; |
| |
| // Sets the activation state for the given identifier. If an entry for this |
| // identifier was not found, a new entry will be created. Returns true on |
| // success. |
| virtual bool SetActivationState(IdentifierType type, |
| const std::string &identifier, |
| State state); |
| |
| // Removes the entry for the given identifier from the database. Returns true |
| // if the operation was successful. If the identifier did not exist in the |
| // database, still returns true. |
| virtual bool RemoveEntry(IdentifierType type, const std::string &identifier); |
| |
| private: |
| friend class PendingActivationStoreTest; |
| friend class CellularCapabilityUniversalTest; |
| FRIEND_TEST(PendingActivationStoreTest, FileInteractions); |
| FRIEND_TEST(PendingActivationStoreTest, GetActivationState); |
| FRIEND_TEST(PendingActivationStoreTest, RemoveEntry); |
| FRIEND_TEST(PendingActivationStoreTest, SetActivationState); |
| |
| static const char kIccidGroupId[]; |
| static const char kMeidGroupId[]; |
| static const char kStorageFileName[]; |
| |
| static std::string IdentifierTypeToGroupId(IdentifierType type); |
| |
| scoped_ptr<StoreInterface> storage_; |
| |
| DISALLOW_COPY_AND_ASSIGN(PendingActivationStore); |
| }; |
| |
| } // namespace shill |
| |
| #endif // SHILL_PENDING_ACTIVATION_STORE_H_ |