cellular_capability_universal.h revision f407d5934100e6f2106aeeede46bafb0074cee35
172fab6ab6f6d481f904b5e259ce27a84e32760e4Arman Uguray// Copyright (c) 2013 The Chromium OS Authors. All rights reserved. 282f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow// Use of this source code is governed by a BSD-style license that can be 382f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow// found in the LICENSE file. 482f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow 5145218710c2daa27ab55690f2ca372200d2a4cdfJason Glasgow#ifndef SHILL_CELLULAR_CAPABILITY_UNIVERSAL_H_ 6145218710c2daa27ab55690f2ca372200d2a4cdfJason Glasgow#define SHILL_CELLULAR_CAPABILITY_UNIVERSAL_H_ 782f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow 882f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow#include <deque> 9af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow#include <map> 1082f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow#include <string> 1182f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow#include <vector> 1282f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow 1382f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow#include <base/memory/scoped_ptr.h> 1482f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow#include <base/memory/weak_ptr.h> 1582f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow#include <gtest/gtest_prod.h> // for FRIEND_TEST 165c853ef21b9247d2ad3d60736b3dea77b8681ed8Ben Chan#include <ModemManager/ModemManager.h> 1782f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow 1882f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow#include "shill/accessor_interface.h" 1982f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow#include "shill/cellular.h" 2082f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow#include "shill/cellular_capability.h" 2107193fdb601f4cea6301ebb85ebf20596807e126Ben Chan#include "shill/cellular_operator_info.h" 226e5639f9ef54db278c5f2265d5364e5994966f4aArman Uguray#include "shill/mm1_bearer_proxy_interface.h" 2382f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow#include "shill/mm1_modem_modem3gpp_proxy_interface.h" 2482f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow#include "shill/mm1_modem_proxy_interface.h" 2582f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow#include "shill/mm1_modem_simple_proxy_interface.h" 2682f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow#include "shill/mm1_sim_proxy_interface.h" 2782f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow 2882f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgowstruct mobile_provider; 2982f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow 3082f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgownamespace shill { 3182f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow 3227526f1dad75e135f437e023cb34b0919d9a981fPrathmesh Prabhuclass ModemInfo; 33c7b1560b03c070fad239767f868322e6b3bdd932Arman Uguray 3482f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow// CellularCapabilityUniversal handles modems using the 3582f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow// org.chromium.ModemManager1 DBUS interface. This class is used for 3682f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow// all types of modems, i.e. CDMA, GSM, and LTE modems. 3782f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgowclass CellularCapabilityUniversal : public CellularCapability { 3882f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow public: 3982f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow typedef std::vector<DBusPropertiesMap> ScanResults; 4082f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow typedef DBusPropertiesMap ScanResult; 4174924d87cc111f8603751f09cd009c830f43e668Ben Chan typedef std::map<uint32_t, uint32_t> LockRetryData; 4282f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow 43145218710c2daa27ab55690f2ca372200d2a4cdfJason Glasgow // Constants used in connect method call. Make available to test matchers. 44145218710c2daa27ab55690f2ca372200d2a4cdfJason Glasgow // TODO(jglasgow): Generate from modem manager into 45145218710c2daa27ab55690f2ca372200d2a4cdfJason Glasgow // ModemManager-names.h. 46ee6b3d7f9d49fa52072a352fbb59f06127b1ba4cPaul Stewart // See http://crbug.com/212909. 47145218710c2daa27ab55690f2ca372200d2a4cdfJason Glasgow static const char kConnectPin[]; 48145218710c2daa27ab55690f2ca372200d2a4cdfJason Glasgow static const char kConnectOperatorId[]; 49145218710c2daa27ab55690f2ca372200d2a4cdfJason Glasgow static const char kConnectApn[]; 50145218710c2daa27ab55690f2ca372200d2a4cdfJason Glasgow static const char kConnectIPType[]; 51145218710c2daa27ab55690f2ca372200d2a4cdfJason Glasgow static const char kConnectUser[]; 52145218710c2daa27ab55690f2ca372200d2a4cdfJason Glasgow static const char kConnectPassword[]; 53145218710c2daa27ab55690f2ca372200d2a4cdfJason Glasgow static const char kConnectNumber[]; 54145218710c2daa27ab55690f2ca372200d2a4cdfJason Glasgow static const char kConnectAllowRoaming[]; 55145218710c2daa27ab55690f2ca372200d2a4cdfJason Glasgow static const char kConnectRMProtocol[]; 56145218710c2daa27ab55690f2ca372200d2a4cdfJason Glasgow 57ce4483e054058ab3f6d940c7aa2e7b5697af325aThieu Le CellularCapabilityUniversal(Cellular *cellular, 58ce4483e054058ab3f6d940c7aa2e7b5697af325aThieu Le ProxyFactory *proxy_factory, 5927526f1dad75e135f437e023cb34b0919d9a981fPrathmesh Prabhu ModemInfo *modem_info); 6082f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow 6182f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow // Inherited from CellularCapability. 62e285a84b38b81f5557b576da187d037ad24ae4afGary Morain // Checks the modem state. If the state is kModemStateDisabled, then the 63e285a84b38b81f5557b576da187d037ad24ae4afGary Morain // modem is enabled. Otherwise, the enable command is buffered until the 64e285a84b38b81f5557b576da187d037ad24ae4afGary Morain // modem becomes disabled. ModemManager rejects the enable command if the 65e285a84b38b81f5557b576da187d037ad24ae4afGary Morain // modem is not disabled, for exmaple, if it is initializing insted. 6682f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow virtual void StartModem(Error *error, const ResultCallback &callback); 6782f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow virtual void StopModem(Error *error, const ResultCallback &callback); 6882f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow virtual void Connect(const DBusPropertiesMap &properties, Error *error, 6982f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow const ResultCallback &callback); 7082f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow virtual void Disconnect(Error *error, const ResultCallback &callback); 718a46890363301a4e28fe3175e194703409e344dcChristopher Wiley virtual void DisconnectCleanup(); 7282f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow virtual void Activate(const std::string &carrier, 7382f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow Error *error, const ResultCallback &callback); 74c7b1560b03c070fad239767f868322e6b3bdd932Arman Uguray virtual void CompleteActivation(Error *error); 7582f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow 7682f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow virtual void OnServiceCreated(); 7782f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow virtual void SetupConnectProperties(DBusPropertiesMap *properties); 78ef96556fff984bbc79597669af2465905666ed09Jason Glasgow virtual void GetProperties(); 7972fab6ab6f6d481f904b5e259ce27a84e32760e4Arman Uguray virtual bool IsRegistered(); 8015786033dc85e3dd7fea18ba936957b8b2c34e29Ben Chan virtual bool IsServiceActivationRequired() const; 8182f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow virtual void Register(const ResultCallback &callback); 8282f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow 8382f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow virtual void RegisterOnNetwork(const std::string &network_id, 8482f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow Error *error, 8582f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow const ResultCallback &callback); 867fce52c4afdc5e73a9e740dc9b90f1e61ae8cea4Eric Shienbrood virtual void SetUnregistered(bool searching); 8782f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow virtual std::string CreateFriendlyServiceName(); 8882f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow virtual void RequirePIN(const std::string &pin, bool require, 8982f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow Error *error, const ResultCallback &callback); 9082f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow virtual void EnterPIN(const std::string &pin, 9182f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow Error *error, const ResultCallback &callback); 9282f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow virtual void UnblockPIN(const std::string &unblock_code, 9382f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow const std::string &pin, 9482f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow Error *error, const ResultCallback &callback); 9582f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow virtual void ChangePIN(const std::string &old_pin, 9682f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow const std::string &new_pin, 9782f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow Error *error, const ResultCallback &callback); 985d0d32c1b5e2370ff0739f7a2dbb641726d4bf87Ben Chan virtual void Reset(Error *error, const ResultCallback &callback); 9982f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow 10082f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow virtual void Scan(Error *error, const ResultCallback &callback); 10182f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow virtual std::string GetNetworkTechnologyString() const; 10282f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow virtual std::string GetRoamingStateString() const; 10382f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow virtual void GetSignalQuality(); 1049f09aeffcd088960c5b1a7d507c3705ce14b2b0dJason Glasgow virtual std::string GetTypeString() const; 10582f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow virtual void OnDBusPropertiesChanged( 10682f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow const std::string &interface, 10782f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow const DBusPropertiesMap &changed_properties, 10882f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow const std::vector<std::string> &invalidated_properties); 109af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow virtual bool AllowRoaming(); 110f84a4242b4218dc375449ab2d68085226f43ce5bArman Uguray virtual bool ShouldDetectOutOfCredit() const; 111145218710c2daa27ab55690f2ca372200d2a4cdfJason Glasgow 11282f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow protected: 11382f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow virtual void InitProxies(); 11482f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow virtual void ReleaseProxies(); 11582f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow 11672fab6ab6f6d481f904b5e259ce27a84e32760e4Arman Uguray // Updates the |sim_path_| variable and creates a new proxy to the 11772fab6ab6f6d481f904b5e259ce27a84e32760e4Arman Uguray // DBUS ModemManager1.Sim interface. 11872fab6ab6f6d481f904b5e259ce27a84e32760e4Arman Uguray // TODO(armansito): Put this method in a 3GPP-only subclass. 11972fab6ab6f6d481f904b5e259ce27a84e32760e4Arman Uguray virtual void OnSimPathChanged(const std::string &sim_path); 12072fab6ab6f6d481f904b5e259ce27a84e32760e4Arman Uguray 12172fab6ab6f6d481f904b5e259ce27a84e32760e4Arman Uguray // Updates the online payment portal information, if any, for the cellular 12272fab6ab6f6d481f904b5e259ce27a84e32760e4Arman Uguray // provider. 12372fab6ab6f6d481f904b5e259ce27a84e32760e4Arman Uguray virtual void UpdateOLP(); 12472fab6ab6f6d481f904b5e259ce27a84e32760e4Arman Uguray 1250a3e27994a45a9723f3867fe7f297e089bd2254bArman Uguray // Post-payment activation handlers. 1260a3e27994a45a9723f3867fe7f297e089bd2254bArman Uguray virtual void UpdatePendingActivationState(); 1270a3e27994a45a9723f3867fe7f297e089bd2254bArman Uguray 12807193fdb601f4cea6301ebb85ebf20596807e126Ben Chan // Returns the operator-specific form of |mdn_|, which is passed to the online 12907193fdb601f4cea6301ebb85ebf20596807e126Ben Chan // payment portal of a cellular operator. 13007193fdb601f4cea6301ebb85ebf20596807e126Ben Chan std::string GetMdnForOLP( 13107193fdb601f4cea6301ebb85ebf20596807e126Ben Chan const CellularOperatorInfo::CellularOperator &cellular_operator) const; 13207193fdb601f4cea6301ebb85ebf20596807e126Ben Chan 1330a3e27994a45a9723f3867fe7f297e089bd2254bArman Uguray const std::string &mdn() const { return mdn_; } 1340a3e27994a45a9723f3867fe7f297e089bd2254bArman Uguray void set_mdn(const std::string &mdn) { mdn_ = mdn; } 1350a3e27994a45a9723f3867fe7f297e089bd2254bArman Uguray 1360a3e27994a45a9723f3867fe7f297e089bd2254bArman Uguray const std::string &min() const { return min_; } 1370a3e27994a45a9723f3867fe7f297e089bd2254bArman Uguray void set_min(const std::string &min) { min_ = min; } 13872fab6ab6f6d481f904b5e259ce27a84e32760e4Arman Uguray 13972fab6ab6f6d481f904b5e259ce27a84e32760e4Arman Uguray const std::string &meid() const { return meid_; } 14072fab6ab6f6d481f904b5e259ce27a84e32760e4Arman Uguray void set_meid(const std::string &meid) { meid_ = meid; } 14172fab6ab6f6d481f904b5e259ce27a84e32760e4Arman Uguray 14272fab6ab6f6d481f904b5e259ce27a84e32760e4Arman Uguray const std::string &esn() const { return esn_; } 14372fab6ab6f6d481f904b5e259ce27a84e32760e4Arman Uguray void set_esn(const std::string &esn) { esn_ = esn; } 14472fab6ab6f6d481f904b5e259ce27a84e32760e4Arman Uguray 14582f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow private: 14674924d87cc111f8603751f09cd009c830f43e668Ben Chan struct ModemModes { 14774924d87cc111f8603751f09cd009c830f43e668Ben Chan ModemModes() 14874924d87cc111f8603751f09cd009c830f43e668Ben Chan : allowed_modes(MM_MODEM_MODE_NONE), 14974924d87cc111f8603751f09cd009c830f43e668Ben Chan preferred_mode(MM_MODEM_MODE_NONE) {} 15074924d87cc111f8603751f09cd009c830f43e668Ben Chan 15174924d87cc111f8603751f09cd009c830f43e668Ben Chan ModemModes(uint32 allowed, MMModemMode preferred) 15274924d87cc111f8603751f09cd009c830f43e668Ben Chan : allowed_modes(allowed), 15374924d87cc111f8603751f09cd009c830f43e668Ben Chan preferred_mode(preferred) {} 15474924d87cc111f8603751f09cd009c830f43e668Ben Chan 15574924d87cc111f8603751f09cd009c830f43e668Ben Chan uint32 allowed_modes; // Bits based on MMModemMode. 15674924d87cc111f8603751f09cd009c830f43e668Ben Chan MMModemMode preferred_mode; // A single MMModemMode bit. 15774924d87cc111f8603751f09cd009c830f43e668Ben Chan }; 15874924d87cc111f8603751f09cd009c830f43e668Ben Chan 159cd0349c9bafcb5c250da25691ada7fcc3752e145Jason Glasgow // Constants used in scan results. Make available to unit tests. 160cd0349c9bafcb5c250da25691ada7fcc3752e145Jason Glasgow // TODO(jglasgow): Generate from modem manager into ModemManager-names.h. 161ee6b3d7f9d49fa52072a352fbb59f06127b1ba4cPaul Stewart // See http://crbug.com/212909. 162cd0349c9bafcb5c250da25691ada7fcc3752e145Jason Glasgow static const char kStatusProperty[]; 163cd0349c9bafcb5c250da25691ada7fcc3752e145Jason Glasgow static const char kOperatorLongProperty[]; 164cd0349c9bafcb5c250da25691ada7fcc3752e145Jason Glasgow static const char kOperatorShortProperty[]; 165cd0349c9bafcb5c250da25691ada7fcc3752e145Jason Glasgow static const char kOperatorCodeProperty[]; 166cd0349c9bafcb5c250da25691ada7fcc3752e145Jason Glasgow static const char kOperatorAccessTechnologyProperty[]; 167cd0349c9bafcb5c250da25691ada7fcc3752e145Jason Glasgow 1689da07771df3dbbc99ff99114c26317d01f29f7fcmukesh agrawal // As above, consider having this in ModemManager-names.h. 1699da07771df3dbbc99ff99114c26317d01f29f7fcmukesh agrawal static const char kIpConfigPropertyMethod[]; 1709da07771df3dbbc99ff99114c26317d01f29f7fcmukesh agrawal 171145218710c2daa27ab55690f2ca372200d2a4cdfJason Glasgow // Modem Model ID strings. From modem firmware via modemmanager. 172145218710c2daa27ab55690f2ca372200d2a4cdfJason Glasgow static const char kE362ModelId[]; 173145218710c2daa27ab55690f2ca372200d2a4cdfJason Glasgow 1742717a10096e12e46413adf47b39c5b19cd33bce7Arman Uguray // Generic service name prefix, shown when the correct carrier name is 1752717a10096e12e46413adf47b39c5b19cd33bce7Arman Uguray // unknown. 1762717a10096e12e46413adf47b39c5b19cd33bce7Arman Uguray static const char kGenericServiceNamePrefix[]; 1772717a10096e12e46413adf47b39c5b19cd33bce7Arman Uguray 178a14941d234722d4f867027a966ef85ae0f7ba3a9Arman Uguray static const int64 kActivationRegistrationTimeoutMilliseconds; 179a14941d234722d4f867027a966ef85ae0f7ba3a9Arman Uguray static const int64 kDefaultScanningOrSearchingTimeoutMilliseconds; 180f6366ac746f63e4bacaa03ea8e524c2e8ec65aa8Arman Uguray static const int64 kEnterPinTimeoutMilliseconds; 1818f6479fed67969c162aa079eed04c55ee574a841Prathmesh Prabhu static const int64 kRegistrationDroppedUpdateTimeoutMilliseconds; 1822cac294eff9415574cb9066e88f5cf43180a5092Thieu Le static const int kSetPowerStateTimeoutMilliseconds; 183ee464d3c77dc7662973bfa5cb3c6eeb207366eacArman Uguray 1841361c0366043f3d2628dc7c339339116ce31085eArman Uguray 1856552f8c74196782e9adf09f4fea01c836f551255Arman Uguray // Root path. The SIM path is reported by ModemManager to be the root path 1866552f8c74196782e9adf09f4fea01c836f551255Arman Uguray // when no SIM is present. 1876552f8c74196782e9adf09f4fea01c836f551255Arman Uguray static const char kRootPath[]; 1886552f8c74196782e9adf09f4fea01c836f551255Arman Uguray 18982f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow friend class CellularTest; 19082f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow friend class CellularCapabilityTest; 1913d27539b13590e0b149440ce017fdc401ef6e735Thieu Le friend class CellularCapabilityUniversalTest; 19272fab6ab6f6d481f904b5e259ce27a84e32760e4Arman Uguray friend class CellularCapabilityUniversalCDMATest; 1930a3e27994a45a9723f3867fe7f297e089bd2254bArman Uguray FRIEND_TEST(CellularCapabilityUniversalCDMAMainTest, PropertiesChanged); 1940a3e27994a45a9723f3867fe7f297e089bd2254bArman Uguray FRIEND_TEST(CellularCapabilityUniversalCDMAMainTest, UpdateOLP); 1951361c0366043f3d2628dc7c339339116ce31085eArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, AllowRoaming); 196a14941d234722d4f867027a966ef85ae0f7ba3a9Arman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, 197a14941d234722d4f867027a966ef85ae0f7ba3a9Arman Uguray ActivationWaitForRegisterTimeout); 1981361c0366043f3d2628dc7c339339116ce31085eArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, Connect); 1991361c0366043f3d2628dc7c339339116ce31085eArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, ConnectApns); 2001361c0366043f3d2628dc7c339339116ce31085eArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, CreateFriendlyServiceName); 2011361c0366043f3d2628dc7c339339116ce31085eArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, DisconnectNoProxy); 2027af0fac103deceec063554ef5705901d6d82d42fArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, 2038f6479fed67969c162aa079eed04c55ee574a841Prathmesh Prabhu DisconnectWithDeferredCallback); 2048f6479fed67969c162aa079eed04c55ee574a841Prathmesh Prabhu FRIEND_TEST(CellularCapabilityUniversalMainTest, 2057af0fac103deceec063554ef5705901d6d82d42fArman Uguray GetNetworkTechnologyStringOnE362); 20607193fdb601f4cea6301ebb85ebf20596807e126Ben Chan FRIEND_TEST(CellularCapabilityUniversalMainTest, GetMdnForOLP); 2071361c0366043f3d2628dc7c339339116ce31085eArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, GetTypeString); 208c7b1560b03c070fad239767f868322e6b3bdd932Arman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, IsMdnValid); 2091361c0366043f3d2628dc7c339339116ce31085eArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, IsServiceActivationRequired); 2106552f8c74196782e9adf09f4fea01c836f551255Arman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, IsValidSimPath); 211d759252158ec07b4a9edbcfdfb265f010b3e7e13Ben Chan FRIEND_TEST(CellularCapabilityUniversalMainTest, NormalizeMdn); 2121361c0366043f3d2628dc7c339339116ce31085eArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, OnListBearersReply); 213c7e63afa9cfabf9aa022a0bf8e9ec5340f5d13bfArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, OnLockRetriesChanged); 214c7e63afa9cfabf9aa022a0bf8e9ec5340f5d13bfArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, OnLockTypeChanged); 2151361c0366043f3d2628dc7c339339116ce31085eArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, 216fcca27bd166ce485d9ef8afce5e060be935ece97Ben Chan OnModemCurrentCapabilitiesChanged); 217c7e63afa9cfabf9aa022a0bf8e9ec5340f5d13bfArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, OnSimLockPropertiesChanged); 2181361c0366043f3d2628dc7c339339116ce31085eArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, PropertiesChanged); 2191361c0366043f3d2628dc7c339339116ce31085eArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, Reset); 2201361c0366043f3d2628dc7c339339116ce31085eArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, Scan); 2211361c0366043f3d2628dc7c339339116ce31085eArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, ScanFailure); 2221361c0366043f3d2628dc7c339339116ce31085eArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, SetHomeProvider); 223d42d8ec85a9a1bdc406870b75d1b9e266fbaaa02Arman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, 224f84a4242b4218dc375449ab2d68085226f43ce5bArman Uguray ShouldDetectOutOfCredit); 2251361c0366043f3d2628dc7c339339116ce31085eArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, SimLockStatusChanged); 226c7e63afa9cfabf9aa022a0bf8e9ec5340f5d13bfArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, SimLockStatusToProperty); 2271361c0366043f3d2628dc7c339339116ce31085eArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, SimPathChanged); 2281361c0366043f3d2628dc7c339339116ce31085eArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, SimPropertiesChanged); 2291361c0366043f3d2628dc7c339339116ce31085eArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, StartModem); 2301361c0366043f3d2628dc7c339339116ce31085eArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, StopModem); 2311361c0366043f3d2628dc7c339339116ce31085eArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, StopModemConnected); 2320a3e27994a45a9723f3867fe7f297e089bd2254bArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, 2330a3e27994a45a9723f3867fe7f297e089bd2254bArman Uguray UpdatePendingActivationState); 234efea6e0f28c3270038914e80166702d5ac23095eArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, 2358f6479fed67969c162aa079eed04c55ee574a841Prathmesh Prabhu UpdateRegistrationState); 2368f6479fed67969c162aa079eed04c55ee574a841Prathmesh Prabhu FRIEND_TEST(CellularCapabilityUniversalMainTest, 2378f6479fed67969c162aa079eed04c55ee574a841Prathmesh Prabhu UpdateRegistrationStateModemNotConnected); 2388f6479fed67969c162aa079eed04c55ee574a841Prathmesh Prabhu FRIEND_TEST(CellularCapabilityUniversalMainTest, 239efea6e0f28c3270038914e80166702d5ac23095eArman Uguray UpdateServiceActivationState); 2401361c0366043f3d2628dc7c339339116ce31085eArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, UpdateServiceName); 2411361c0366043f3d2628dc7c339339116ce31085eArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, UpdateStorageIdentifier); 2421361c0366043f3d2628dc7c339339116ce31085eArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, UpdateOLP); 2431361c0366043f3d2628dc7c339339116ce31085eArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, UpdateOperatorInfo); 2441361c0366043f3d2628dc7c339339116ce31085eArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, 2451361c0366043f3d2628dc7c339339116ce31085eArman Uguray UpdateOperatorInfoViaOperatorId); 2461361c0366043f3d2628dc7c339339116ce31085eArman Uguray FRIEND_TEST(CellularCapabilityUniversalMainTest, UpdateScanningProperty); 247a14941d234722d4f867027a966ef85ae0f7ba3a9Arman Uguray FRIEND_TEST(CellularCapabilityUniversalTimerTest, CompleteActivation); 2481361c0366043f3d2628dc7c339339116ce31085eArman Uguray FRIEND_TEST(CellularCapabilityUniversalTimerTest, 2491361c0366043f3d2628dc7c339339116ce31085eArman Uguray UpdateScanningPropertyTimeout); 250d42d8ec85a9a1bdc406870b75d1b9e266fbaaa02Arman Uguray FRIEND_TEST(CellularTest, EnableTrafficMonitor); 25109fa2a0e9c0feed7b3ca23fc7d8ad59783f4c6a7Ben Chan FRIEND_TEST(CellularTest, 25209fa2a0e9c0feed7b3ca23fc7d8ad59783f4c6a7Ben Chan HandleNewRegistrationStateForServiceRequiringActivation); 2535218cf2bb1301197e0e3c9381bc4c66e8adf80b0Thieu Le FRIEND_TEST(CellularTest, ModemStateChangeLostRegistration); 254f407d5934100e6f2106aeeede46bafb0074cee35mukesh agrawal FRIEND_TEST(CellularTest, OnPPPDied); 25582f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow 256c7e63afa9cfabf9aa022a0bf8e9ec5340f5d13bfArman Uguray // SimLockStatus represents the fields in the Cellular.SIMLockStatus 257c7e63afa9cfabf9aa022a0bf8e9ec5340f5d13bfArman Uguray // DBUS property of the shill device. 258c7e63afa9cfabf9aa022a0bf8e9ec5340f5d13bfArman Uguray struct SimLockStatus { 259c7e63afa9cfabf9aa022a0bf8e9ec5340f5d13bfArman Uguray public: 260c7e63afa9cfabf9aa022a0bf8e9ec5340f5d13bfArman Uguray SimLockStatus() : enabled(false), 261c7e63afa9cfabf9aa022a0bf8e9ec5340f5d13bfArman Uguray lock_type(MM_MODEM_LOCK_UNKNOWN), 262c7e63afa9cfabf9aa022a0bf8e9ec5340f5d13bfArman Uguray retries_left(0) {} 263c7e63afa9cfabf9aa022a0bf8e9ec5340f5d13bfArman Uguray 264c7e63afa9cfabf9aa022a0bf8e9ec5340f5d13bfArman Uguray bool enabled; 265c7e63afa9cfabf9aa022a0bf8e9ec5340f5d13bfArman Uguray MMModemLock lock_type; 266c7e63afa9cfabf9aa022a0bf8e9ec5340f5d13bfArman Uguray uint32 retries_left; 267c7e63afa9cfabf9aa022a0bf8e9ec5340f5d13bfArman Uguray }; 268c7e63afa9cfabf9aa022a0bf8e9ec5340f5d13bfArman Uguray 269ef96556fff984bbc79597669af2465905666ed09Jason Glasgow // Methods used in starting a modem 270e285a84b38b81f5557b576da187d037ad24ae4afGary Morain void EnableModem(Error *error, const ResultCallback &callback); 271b9c05e082cf4afc03dc4d0748a08feb2340ded92Thieu Le void Start_ModemAlreadyEnabled(const ResultCallback &callback); 272ef96556fff984bbc79597669af2465905666ed09Jason Glasgow void Start_EnableModemCompleted(const ResultCallback &callback, 273ef96556fff984bbc79597669af2465905666ed09Jason Glasgow const Error &error); 274ef96556fff984bbc79597669af2465905666ed09Jason Glasgow 275ef96556fff984bbc79597669af2465905666ed09Jason Glasgow // Methods used in stopping a modem 276ef96556fff984bbc79597669af2465905666ed09Jason Glasgow void Stop_DisconnectCompleted(const ResultCallback &callback, 277ef96556fff984bbc79597669af2465905666ed09Jason Glasgow const Error &error); 278ef96556fff984bbc79597669af2465905666ed09Jason Glasgow void Stop_Disable(const ResultCallback &callback); 279ef96556fff984bbc79597669af2465905666ed09Jason Glasgow void Stop_DisableCompleted(const ResultCallback &callback, 280ef96556fff984bbc79597669af2465905666ed09Jason Glasgow const Error &error); 281ee464d3c77dc7662973bfa5cb3c6eeb207366eacArman Uguray void Stop_PowerDown(const ResultCallback &callback); 282ee464d3c77dc7662973bfa5cb3c6eeb207366eacArman Uguray void Stop_PowerDownCompleted(const ResultCallback &callback, 283ee464d3c77dc7662973bfa5cb3c6eeb207366eacArman Uguray const Error &error); 284ef96556fff984bbc79597669af2465905666ed09Jason Glasgow 2852717a10096e12e46413adf47b39c5b19cd33bce7Arman Uguray // Updates the name property that is exposed by the service to Chrome. 2862717a10096e12e46413adf47b39c5b19cd33bce7Arman Uguray void UpdateServiceName(); 2872717a10096e12e46413adf47b39c5b19cd33bce7Arman Uguray 2888a2c01e2d7fb27724f529adc3a0aa2daba9b1b44Ben Chan void UpdateScanningProperty(); 2898a2c01e2d7fb27724f529adc3a0aa2daba9b1b44Ben Chan 290d73783fb016a4c9d7d8644db83c8caeb447b0063Arman Uguray // Methods used in acquiring information related to the carrier; 291d73783fb016a4c9d7d8644db83c8caeb447b0063Arman Uguray 29282f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow // Updates the Universal operator name and country based on a newly 29382f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow // obtained network id. 29482f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow void UpdateOperatorInfo(); 29582f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow 296d73783fb016a4c9d7d8644db83c8caeb447b0063Arman Uguray // Sets the upper level information about the home cellular provider from the 297d73783fb016a4c9d7d8644db83c8caeb447b0063Arman Uguray // modem's IMSI and SPN. 298d73783fb016a4c9d7d8644db83c8caeb447b0063Arman Uguray void SetHomeProvider(); 299d73783fb016a4c9d7d8644db83c8caeb447b0063Arman Uguray 30082f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow // Updates the serving operator on the active service. 30182f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow void UpdateServingOperator(); 30282f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow 303d73783fb016a4c9d7d8644db83c8caeb447b0063Arman Uguray // Initializes the |apn_list_| property based on the current |home_provider_|. 304d73783fb016a4c9d7d8644db83c8caeb447b0063Arman Uguray void InitAPNList(); 305d73783fb016a4c9d7d8644db83c8caeb447b0063Arman Uguray 3066e5639f9ef54db278c5f2265d5364e5994966f4aArman Uguray // Updates |bearer_path_| to match the currently active bearer. 3076e5639f9ef54db278c5f2265d5364e5994966f4aArman Uguray void UpdateBearerPath(); 3086e5639f9ef54db278c5f2265d5364e5994966f4aArman Uguray 309c953357b248a9559c95097892d1458ff1a4e43bfArman Uguray // Updates the storage identifier used for the current cellular service. 310c953357b248a9559c95097892d1458ff1a4e43bfArman Uguray void UpdateStorageIdentifier(); 311c953357b248a9559c95097892d1458ff1a4e43bfArman Uguray 31282f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow 31382f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow Stringmap ParseScanResult(const ScanResult &result); 31482f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow 31582f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow KeyValueStore SimLockStatusToProperty(Error *error); 31682f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow 31782f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow void SetupApnTryList(); 31882f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow void FillConnectPropertyMap(DBusPropertiesMap *properties); 31982f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow 320bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal void HelpRegisterConstDerivedKeyValueStore( 32182f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow const std::string &name, 322bebf1b8bce52b88c2cc2d93200b9405f9c19cf21mukesh agrawal KeyValueStore(CellularCapabilityUniversal::*get)(Error *error)); 32382f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow 324145218710c2daa27ab55690f2ca372200d2a4cdfJason Glasgow // Returns true if a connect error should be retried. This function 325145218710c2daa27ab55690f2ca372200d2a4cdfJason Glasgow // abstracts modem specific behavior for modems which do a lousy job 326145218710c2daa27ab55690f2ca372200d2a4cdfJason Glasgow // of returning specific errors on connect failures. 327145218710c2daa27ab55690f2ca372200d2a4cdfJason Glasgow bool RetriableConnectError(const Error &error) const; 328145218710c2daa27ab55690f2ca372200d2a4cdfJason Glasgow 32982f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow // Signal callbacks 3303022be5da0e7e158c7f8fc4e3f5d005eb5dde7e7Nathan Williams void OnNetworkModeSignal(uint32 mode); 3317fce52c4afdc5e73a9e740dc9b90f1e61ae8cea4Eric Shienbrood void OnModemStateChangedSignal(int32 old_state, 3327fce52c4afdc5e73a9e740dc9b90f1e61ae8cea4Eric Shienbrood int32 new_state, 3337fce52c4afdc5e73a9e740dc9b90f1e61ae8cea4Eric Shienbrood uint32 reason); 33482f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow 33582f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow // Property Change notification handlers 3363022be5da0e7e158c7f8fc4e3f5d005eb5dde7e7Nathan Williams void OnModemPropertiesChanged( 3374c0724af38d0eaf7155bb789280940a41ef9f08cJason Glasgow const DBusPropertiesMap &properties, 3384c0724af38d0eaf7155bb789280940a41ef9f08cJason Glasgow const std::vector<std::string> &invalidated_properties); 3394c0724af38d0eaf7155bb789280940a41ef9f08cJason Glasgow 3403022be5da0e7e158c7f8fc4e3f5d005eb5dde7e7Nathan Williams void OnSignalQualityChanged(uint32 quality); 34174924d87cc111f8603751f09cd009c830f43e668Ben Chan 34274924d87cc111f8603751f09cd009c830f43e668Ben Chan void OnSupportedCapabilitesChanged( 34374924d87cc111f8603751f09cd009c830f43e668Ben Chan const std::vector<uint32> &supported_capabilities); 344af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow void OnModemCurrentCapabilitiesChanged(uint32 current_capabilities); 345af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow void OnMdnChanged(const std::string &mdn); 346af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow void OnModemManufacturerChanged(const std::string &manufacturer); 347af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow void OnModemModelChanged(const std::string &model); 348af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow void OnModemRevisionChanged(const std::string &revision); 349af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow void OnModemStateChanged(Cellular::ModemState state); 350af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow void OnAccessTechnologiesChanged(uint32 access_technologies); 35174924d87cc111f8603751f09cd009c830f43e668Ben Chan void OnSupportedModesChanged(const std::vector<ModemModes> &supported_modes); 35274924d87cc111f8603751f09cd009c830f43e668Ben Chan void OnCurrentModesChanged(const ModemModes ¤t_modes); 353c7e63afa9cfabf9aa022a0bf8e9ec5340f5d13bfArman Uguray void OnLockRetriesChanged(const LockRetryData &lock_retries); 354c7e63afa9cfabf9aa022a0bf8e9ec5340f5d13bfArman Uguray void OnLockTypeChanged(MMModemLock unlock_required); 355af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow void OnSimLockStatusChanged(); 356af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow 357c7b1560b03c070fad239767f868322e6b3bdd932Arman Uguray // Returns false if the MDN is empty or if the MDN consists of all 0s. 358c7b1560b03c070fad239767f868322e6b3bdd932Arman Uguray bool IsMdnValid() const; 359c7b1560b03c070fad239767f868322e6b3bdd932Arman Uguray 360af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow // 3GPP property change handlers 361af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow virtual void OnModem3GPPPropertiesChanged( 362af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow const DBusPropertiesMap &properties, 363af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow const std::vector<std::string> &invalidated_properties); 364af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow void OnImeiChanged(const std::string &imei); 365af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow void On3GPPRegistrationChanged(MMModem3gppRegistrationState state, 366af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow const std::string &operator_code, 367af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow const std::string &operator_name); 3688f6479fed67969c162aa079eed04c55ee574a841Prathmesh Prabhu void Handle3GPPRegistrationChange( 3698f6479fed67969c162aa079eed04c55ee574a841Prathmesh Prabhu MMModem3gppRegistrationState updated_state, 3708f6479fed67969c162aa079eed04c55ee574a841Prathmesh Prabhu std::string updated_operator_code, 3718f6479fed67969c162aa079eed04c55ee574a841Prathmesh Prabhu std::string updated_operator_name); 372af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow void OnFacilityLocksChanged(uint32 locks); 373af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow 374af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow // SIM property change handlers 37572fab6ab6f6d481f904b5e259ce27a84e32760e4Arman Uguray // TODO(armansito): Put these methods in a 3GPP-only subclass. 376af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow void OnSimPropertiesChanged( 377af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow const DBusPropertiesMap &props, 378af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow const std::vector<std::string> &invalidated_properties); 379af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow void OnImsiChanged(const std::string &imsi); 380d73783fb016a4c9d7d8644db83c8caeb447b0063Arman Uguray void OnSpnChanged(const std::string &spn); 381af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow void OnSimIdentifierChanged(const std::string &id); 382af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow void OnOperatorIdChanged(const std::string &operator_id); 383af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow void OnOperatorNameChanged(const std::string &operator_name); 384ef96556fff984bbc79597669af2465905666ed09Jason Glasgow 38582f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow // Method callbacks 3863022be5da0e7e158c7f8fc4e3f5d005eb5dde7e7Nathan Williams void OnRegisterReply(const ResultCallback &callback, 3873022be5da0e7e158c7f8fc4e3f5d005eb5dde7e7Nathan Williams const Error &error); 3885d0d32c1b5e2370ff0739f7a2dbb641726d4bf87Ben Chan void OnResetReply(const ResultCallback &callback, const Error &error); 3893022be5da0e7e158c7f8fc4e3f5d005eb5dde7e7Nathan Williams void OnScanReply(const ResultCallback &callback, 3903022be5da0e7e158c7f8fc4e3f5d005eb5dde7e7Nathan Williams const ScanResults &results, 3913022be5da0e7e158c7f8fc4e3f5d005eb5dde7e7Nathan Williams const Error &error); 392b54974f033f713690135f3f3516ca14aa7ee6cfdNathan Williams void OnConnectReply(const ResultCallback &callback, 393b54974f033f713690135f3f3516ca14aa7ee6cfdNathan Williams const DBus::Path &bearer, 394b54974f033f713690135f3f3516ca14aa7ee6cfdNathan Williams const Error &error); 3956e5639f9ef54db278c5f2265d5364e5994966f4aArman Uguray void OnListBearersReply(const std::vector<DBus::Path> &paths, 3966e5639f9ef54db278c5f2265d5364e5994966f4aArman Uguray const Error &error); 39782f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow 3981361c0366043f3d2628dc7c339339116ce31085eArman Uguray // Timeout callback for the network scan initiated when Cellular connectivity 3991361c0366043f3d2628dc7c339339116ce31085eArman Uguray // gets enabled. 4001361c0366043f3d2628dc7c339339116ce31085eArman Uguray void OnScanningOrSearchingTimeout(); 4011361c0366043f3d2628dc7c339339116ce31085eArman Uguray 402a14941d234722d4f867027a966ef85ae0f7ba3a9Arman Uguray // Timeout callback that is called if the modem takes too long to register to 403a14941d234722d4f867027a966ef85ae0f7ba3a9Arman Uguray // a network after online payment is complete. Resets the modem. 404a14941d234722d4f867027a966ef85ae0f7ba3a9Arman Uguray void OnActivationWaitForRegisterTimeout(); 405a14941d234722d4f867027a966ef85ae0f7ba3a9Arman Uguray 4066552f8c74196782e9adf09f4fea01c836f551255Arman Uguray // Returns true, if |sim_path| constitutes a valid SIM path. Currently, a 4076552f8c74196782e9adf09f4fea01c836f551255Arman Uguray // path is accepted to be valid, as long as it is not equal to one of "" 4086552f8c74196782e9adf09f4fea01c836f551255Arman Uguray // and "/". 4096552f8c74196782e9adf09f4fea01c836f551255Arman Uguray bool IsValidSimPath(const std::string &sim_path) const; 4106552f8c74196782e9adf09f4fea01c836f551255Arman Uguray 411d759252158ec07b4a9edbcfdfb265f010b3e7e13Ben Chan // Returns the normalized version of |mdn| by keeping only digits in |mdn| 412d759252158ec07b4a9edbcfdfb265f010b3e7e13Ben Chan // and removing other non-digit characters. 413d759252158ec07b4a9edbcfdfb265f010b3e7e13Ben Chan std::string NormalizeMdn(const std::string &mdn) const; 414d759252158ec07b4a9edbcfdfb265f010b3e7e13Ben Chan 4152717a10096e12e46413adf47b39c5b19cd33bce7Arman Uguray static std::string GenerateNewGenericServiceName(); 4162717a10096e12e46413adf47b39c5b19cd33bce7Arman Uguray 417c7b1560b03c070fad239767f868322e6b3bdd932Arman Uguray // Post-payment activation handlers. 418c7b1560b03c070fad239767f868322e6b3bdd932Arman Uguray void ResetAfterActivation(); 419efea6e0f28c3270038914e80166702d5ac23095eArman Uguray void UpdateServiceActivationState(); 420c7b1560b03c070fad239767f868322e6b3bdd932Arman Uguray void OnResetAfterActivationReply(const Error &error); 421c7b1560b03c070fad239767f868322e6b3bdd932Arman Uguray 4228f6479fed67969c162aa079eed04c55ee574a841Prathmesh Prabhu static bool IsRegisteredState(MMModem3gppRegistrationState state); 4238f6479fed67969c162aa079eed04c55ee574a841Prathmesh Prabhu 42482f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow scoped_ptr<mm1::ModemModem3gppProxyInterface> modem_3gpp_proxy_; 42582f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow scoped_ptr<mm1::ModemProxyInterface> modem_proxy_; 42682f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow scoped_ptr<mm1::ModemSimpleProxyInterface> modem_simple_proxy_; 42782f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow scoped_ptr<mm1::SimProxyInterface> sim_proxy_; 42882f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow 42982f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow base::WeakPtrFactory<CellularCapabilityUniversal> weak_ptr_factory_; 43082f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow 43182f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow MMModem3gppRegistrationState registration_state_; 432af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow 433af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow // Bits based on MMModemCapabilities 43474924d87cc111f8603751f09cd009c830f43e668Ben Chan std::vector<uint32> supported_capabilities_; // Technologies supported 43574924d87cc111f8603751f09cd009c830f43e668Ben Chan uint32 current_capabilities_; // Technologies supported without a reload 436145218710c2daa27ab55690f2ca372200d2a4cdfJason Glasgow uint32 access_technologies_; // Bits based on MMModemAccessTechnology 43774924d87cc111f8603751f09cd009c830f43e668Ben Chan std::vector<ModemModes> supported_modes_; 43874924d87cc111f8603751f09cd009c830f43e668Ben Chan ModemModes current_modes_; 439af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow 44082f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow Cellular::Operator serving_operator_; 44182f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow std::string spn_; 442af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow std::string sim_identifier_; 443af5832853cf49fcfa34632a736aa4763ef2347d6Jason Glasgow std::string operator_id_; 44482f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow mobile_provider *home_provider_; 445f508c8273e6265599f184189a424e697598eb980Darin Petkov bool provider_requires_roaming_; 44682f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow std::string desired_network_; 44782f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow 44882f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow // Properties. 44982f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow std::string carrier_; 45082f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow std::string esn_; 45182f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow std::string firmware_revision_; 45282f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow std::string hardware_revision_; 45382f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow std::string imei_; 45482f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow std::string imsi_; 45582f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow std::string manufacturer_; 45682f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow std::string mdn_; 45782f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow std::string meid_; 45882f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow std::string min_; 45982f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow std::string model_id_; 46082f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow std::string selected_network_; 46182f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow Stringmaps found_networks_; 46282f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow std::deque<Stringmap> apn_try_list_; 4635d0d32c1b5e2370ff0739f7a2dbb641726d4bf87Ben Chan bool resetting_; 46482f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow bool scanning_supported_; 46582f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow bool scanning_; 4668a2c01e2d7fb27724f529adc3a0aa2daba9b1b44Ben Chan bool scanning_or_searching_; 46782f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow uint16 scan_interval_; 46882f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow SimLockStatus sim_lock_status_; 46982f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow Stringmaps apn_list_; 470ef96556fff984bbc79597669af2465905666ed09Jason Glasgow std::string sim_path_; 471bd3aee80be371d838863eccf708fd107153503efBen Chan bool sim_present_; 472b54974f033f713690135f3f3516ca14aa7ee6cfdNathan Williams DBus::Path bearer_path_; 473c7b1560b03c070fad239767f868322e6b3bdd932Arman Uguray bool reset_done_; 474c7b1560b03c070fad239767f868322e6b3bdd932Arman Uguray 475e285a84b38b81f5557b576da187d037ad24ae4afGary Morain // If the modem is not in a state to be enabled when StartModem is called, 476e285a84b38b81f5557b576da187d037ad24ae4afGary Morain // enabling is deferred using this callback. 477e285a84b38b81f5557b576da187d037ad24ae4afGary Morain base::Closure deferred_enable_modem_callback_; 478e285a84b38b81f5557b576da187d037ad24ae4afGary Morain 4791361c0366043f3d2628dc7c339339116ce31085eArman Uguray // Sometimes modems may be stuck in the SEARCHING state during the lack of 4801361c0366043f3d2628dc7c339339116ce31085eArman Uguray // presence of a network. During this indefinite duration of time, keeping 4811361c0366043f3d2628dc7c339339116ce31085eArman Uguray // the Device.Scanning property as |true| causes a bad user experience. 4821361c0366043f3d2628dc7c339339116ce31085eArman Uguray // This callback sets it to |false| after a timeout period has passed. 4831361c0366043f3d2628dc7c339339116ce31085eArman Uguray base::CancelableClosure scanning_or_searching_timeout_callback_; 484a14941d234722d4f867027a966ef85ae0f7ba3a9Arman Uguray int64 scanning_or_searching_timeout_milliseconds_; 485a14941d234722d4f867027a966ef85ae0f7ba3a9Arman Uguray 486a14941d234722d4f867027a966ef85ae0f7ba3a9Arman Uguray base::CancelableClosure activation_wait_for_registration_callback_; 487a14941d234722d4f867027a966ef85ae0f7ba3a9Arman Uguray int64 activation_registration_timeout_milliseconds_; 4881361c0366043f3d2628dc7c339339116ce31085eArman Uguray 4898f6479fed67969c162aa079eed04c55ee574a841Prathmesh Prabhu // Sometimes flaky cellular network causes the 3GPP registration state to 4908f6479fed67969c162aa079eed04c55ee574a841Prathmesh Prabhu // rapidly change from registered --> searching and back. Delay such updates 4918f6479fed67969c162aa079eed04c55ee574a841Prathmesh Prabhu // a little to smooth over temporary registration loss. 4928f6479fed67969c162aa079eed04c55ee574a841Prathmesh Prabhu base::CancelableClosure registration_dropped_update_callback_; 4938f6479fed67969c162aa079eed04c55ee574a841Prathmesh Prabhu int64 registration_dropped_update_timeout_milliseconds_; 4948f6479fed67969c162aa079eed04c55ee574a841Prathmesh Prabhu 49582f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow static unsigned int friendly_service_name_id_; 49682f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow 49782f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow DISALLOW_COPY_AND_ASSIGN(CellularCapabilityUniversal); 49882f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow}; 49982f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow 50082f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow} // namespace shill 50182f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow 502145218710c2daa27ab55690f2ca372200d2a4cdfJason Glasgow#endif // SHILL_CELLULAR_CAPABILITY_UNIVERSAL_H_ 503