1c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 2c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Copyright (C) 2012 The Android Open Source Project 3c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 4c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Licensed under the Apache License, Version 2.0 (the "License"); 5c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// you may not use this file except in compliance with the License. 6c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// You may obtain a copy of the License at 7c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 8c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// http://www.apache.org/licenses/LICENSE-2.0 9c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 10c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Unless required by applicable law or agreed to in writing, software 11c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// distributed under the License is distributed on an "AS IS" BASIS, 12c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// See the License for the specific language governing permissions and 14c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// limitations under the License. 15c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 1699c8a4d2e6b81b1c395b2e1054111b29c20a5189Ben Chan 17c3d707d1ae4198d5538ff4deccd729a83f1bc805Ben Chan#ifndef SHILL_WIMAX_WIMAX_SERVICE_H_ 18c3d707d1ae4198d5538ff4deccd729a83f1bc805Ben Chan#define SHILL_WIMAX_WIMAX_SERVICE_H_ 1999c8a4d2e6b81b1c395b2e1054111b29c20a5189Ben Chan 20247dcc12556bbfb7e50753befe217d29eb2f2f86Ben Chan#include <memory> 218a5322984f2d81bcbfd8d44c59747a11bd9b904bAlex Vakulenko#include <string> 228a5322984f2d81bcbfd8d44c59747a11bd9b904bAlex Vakulenko 23e4b270274cba2a1976c7be6c733bd899e009c1d1Darin Petkov#include <gtest/gtest_prod.h> // for FRIEND_TEST 24e4b270274cba2a1976c7be6c733bd899e009c1d1Darin Petkov 2599c8a4d2e6b81b1c395b2e1054111b29c20a5189Ben Chan#include "shill/refptr_types.h" 2699c8a4d2e6b81b1c395b2e1054111b29c20a5189Ben Chan#include "shill/service.h" 27c3d707d1ae4198d5538ff4deccd729a83f1bc805Ben Chan#include "shill/wimax/wimax_network_proxy_interface.h" 2899c8a4d2e6b81b1c395b2e1054111b29c20a5189Ben Chan 2999c8a4d2e6b81b1c395b2e1054111b29c20a5189Ben Channamespace shill { 3099c8a4d2e6b81b1c395b2e1054111b29c20a5189Ben Chan 3125665aa52da9f6e08a23fc462b09c2ae63a8a5f2Darin Petkovclass KeyValueStore; 329893d9c59f596e621463c8e97bb3933f8fa7edf6Darin Petkov 3399c8a4d2e6b81b1c395b2e1054111b29c20a5189Ben Chanclass WiMaxService : public Service { 3499c8a4d2e6b81b1c395b2e1054111b29c20a5189Ben Chan public: 35d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov static const char kStorageNetworkId[]; 36d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov 37d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov // TODO(petkov): Declare this in chromeos/dbus/service_constants.h. 38d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov static const char kNetworkIdProperty[]; 39d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov 4093d817916f4cac344b6985c867a85f65711a1486Paul Stewart WiMaxService(ControlInterface* control, 4193d817916f4cac344b6985c867a85f65711a1486Paul Stewart EventDispatcher* dispatcher, 4293d817916f4cac344b6985c867a85f65711a1486Paul Stewart Metrics* metrics, 4393d817916f4cac344b6985c867a85f65711a1486Paul Stewart Manager* manager); 445ea763b83299b5fad76a87183fb39a74c2d3c61dBen Chan ~WiMaxService() override; 4599c8a4d2e6b81b1c395b2e1054111b29c20a5189Ben Chan 464e5c1310a1c70445a473653bd37d06604c5d5f47Ben Chan // Returns the parameters to be passed to WiMaxManager.Device.Connect() when 474e5c1310a1c70445a473653bd37d06604c5d5f47Ben Chan // connecting to the network associated with this service. 4893d817916f4cac344b6985c867a85f65711a1486Paul Stewart void GetConnectParameters(KeyValueStore* parameters) const; 494e5c1310a1c70445a473653bd37d06604c5d5f47Ben Chan 501e52a1b85f387a5f81e01a6f9fc5196e073803caDarin Petkov // Returns the RPC object path for the WiMaxManager.Network object associated 511e52a1b85f387a5f81e01a6f9fc5196e073803caDarin Petkov // with this service. Must only be called after |proxy_| is set by Start(). 52d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov virtual RpcIdentifier GetNetworkObjectPath() const; 53d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov 54d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov // Starts the service by associating it with the RPC network object |proxy| 55d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov // and listening for its signal strength. Returns true on success, false 56d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov // otherwise. Takes ownership of proxy, regardless of the result of the 57d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov // operation. The proxy will be destroyed on failure. 5893d817916f4cac344b6985c867a85f65711a1486Paul Stewart virtual bool Start(WiMaxNetworkProxyInterface* proxy); 594e5c1310a1c70445a473653bd37d06604c5d5f47Ben Chan 60d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov // Stops the service by disassociating it from |proxy_| and resetting its 61c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov // signal strength to 0. If the service is connected, it notifies the carrier 62c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov // device that the service is stopped. 63d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov virtual void Stop(); 64d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov 65d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov virtual bool IsStarted() const; 669893d9c59f596e621463c8e97bb3933f8fa7edf6Darin Petkov 6793d817916f4cac344b6985c867a85f65711a1486Paul Stewart const std::string& network_name() const { return network_name_; } 6893d817916f4cac344b6985c867a85f65711a1486Paul Stewart const WiMaxNetworkId& network_id() const { return network_id_; } 6993d817916f4cac344b6985c867a85f65711a1486Paul Stewart void set_network_id(const WiMaxNetworkId& id) { network_id_ = id; } 70c1e5273c8c52bb3e5c20364d5c172d57417d3c4cDarin Petkov bool is_default() const { return is_default_; } 71c1e5273c8c52bb3e5c20364d5c172d57417d3c4cDarin Petkov void set_is_default(bool is_default) { is_default_ = is_default; } 72d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov 737fab89734d88724a288e96a9996b15548c5294c7Ben Chan static WiMaxNetworkId ConvertIdentifierToNetworkId(uint32_t identifier); 74d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov 75d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov // Initializes the storage identifier. Note that the friendly service name and 76d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov // the |network_id_| must already be initialized. 77d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov void InitStorageIdentifier(); 7893d817916f4cac344b6985c867a85f65711a1486Paul Stewart static std::string CreateStorageIdentifier(const WiMaxNetworkId& id, 7993d817916f4cac344b6985c867a85f65711a1486Paul Stewart const std::string& name); 809893d9c59f596e621463c8e97bb3933f8fa7edf6Darin Petkov 81a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov virtual void ClearPassphrase(); 82a3f9f775e30f6fbb06f34f7ee9e20a68a1412c95Darin Petkov 8399c8a4d2e6b81b1c395b2e1054111b29c20a5189Ben Chan // Inherited from Service. 8493d817916f4cac344b6985c867a85f65711a1486Paul Stewart void Connect(Error* error, const char* reason) override; 8593d817916f4cac344b6985c867a85f65711a1486Paul Stewart void Disconnect(Error* error, const char* reason) override; 866acd966cabe0d75e0d9ae3f84c727c9b44a899b3Yunlian Jiang std::string GetStorageIdentifier() const override; 876acd966cabe0d75e0d9ae3f84c727c9b44a899b3Yunlian Jiang bool Is8021x() const override; 886acd966cabe0d75e0d9ae3f84c727c9b44a899b3Yunlian Jiang bool IsVisible() const override; 896acd966cabe0d75e0d9ae3f84c727c9b44a899b3Yunlian Jiang void OnEapCredentialsChanged( 906acd966cabe0d75e0d9ae3f84c727c9b44a899b3Yunlian Jiang Service::UpdateCredentialsReason reason) override; 9193d817916f4cac344b6985c867a85f65711a1486Paul Stewart bool Save(StoreInterface* storage) override; 926acd966cabe0d75e0d9ae3f84c727c9b44a899b3Yunlian Jiang bool Unload() override; 936acd966cabe0d75e0d9ae3f84c727c9b44a899b3Yunlian Jiang void SetState(ConnectState state) override; 94c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov 9599c8a4d2e6b81b1c395b2e1054111b29c20a5189Ben Chan private: 96c63dcf0b428ea99e8a9a88bc964a51e65b6dddf0Darin Petkov friend class WiMaxServiceTest; 97a289f6682940ac49c7f7217bc5f5168eef06ff75Ben Chan FRIEND_TEST(WiMaxServiceTest, Connect); 98a289f6682940ac49c7f7217bc5f5168eef06ff75Ben Chan FRIEND_TEST(WiMaxServiceTest, Connectable); 99e4b270274cba2a1976c7be6c733bd899e009c1d1Darin Petkov FRIEND_TEST(WiMaxServiceTest, GetDeviceRpcId); 1006b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov FRIEND_TEST(WiMaxServiceTest, IsAutoConnectable); 1011e52a1b85f387a5f81e01a6f9fc5196e073803caDarin Petkov FRIEND_TEST(WiMaxServiceTest, OnSignalStrengthChanged); 1028ea0eaf6fb42aa7d959a131e43ea1d06635d6da2Darin Petkov FRIEND_TEST(WiMaxServiceTest, SetState); 103d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov FRIEND_TEST(WiMaxServiceTest, StartStop); 104e4b270274cba2a1976c7be6c733bd899e009c1d1Darin Petkov 1056b9b2e18088f22b79ea5d87f575b67632fb5770aDarin Petkov // Inherited from Service. 10693d817916f4cac344b6985c867a85f65711a1486Paul Stewart std::string GetDeviceRpcId(Error* error) const override; 10793d817916f4cac344b6985c867a85f65711a1486Paul Stewart bool IsAutoConnectable(const char** reason) const override; 108c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan 1091e52a1b85f387a5f81e01a6f9fc5196e073803caDarin Petkov void OnSignalStrengthChanged(int strength); 1101e52a1b85f387a5f81e01a6f9fc5196e073803caDarin Petkov 1118021e7f581b1d040fa8ff0a09ee9444bdb58bc86Darin Petkov void UpdateConnectable(); 1128021e7f581b1d040fa8ff0a09ee9444bdb58bc86Darin Petkov 113cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal // Update |device_|, and inform RPC listeners of the change. 114cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal void SetDevice(WiMaxRefPtr new_device); 115cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal 116cbfb34e699532f62eb5b381d0ea3a15d39e00b7cmukesh agrawal WiMaxRefPtr device_; // Update via SetDevice(). 117247dcc12556bbfb7e50753befe217d29eb2f2f86Ben Chan std::unique_ptr<WiMaxNetworkProxyInterface> proxy_; 118e4b270274cba2a1976c7be6c733bd899e009c1d1Darin Petkov std::string storage_id_; 11999c8a4d2e6b81b1c395b2e1054111b29c20a5189Ben Chan 120d1cd79736d7a9969c966a76a5906ea408bad3731Darin Petkov WiMaxNetworkId network_id_; 1219893d9c59f596e621463c8e97bb3933f8fa7edf6Darin Petkov std::string network_name_; 1224e5c1310a1c70445a473653bd37d06604c5d5f47Ben Chan bool need_passphrase_; 123c1e5273c8c52bb3e5c20364d5c172d57417d3c4cDarin Petkov bool is_default_; 1249893d9c59f596e621463c8e97bb3933f8fa7edf6Darin Petkov 12599c8a4d2e6b81b1c395b2e1054111b29c20a5189Ben Chan DISALLOW_COPY_AND_ASSIGN(WiMaxService); 12699c8a4d2e6b81b1c395b2e1054111b29c20a5189Ben Chan}; 12799c8a4d2e6b81b1c395b2e1054111b29c20a5189Ben Chan 12899c8a4d2e6b81b1c395b2e1054111b29c20a5189Ben Chan} // namespace shill 12999c8a4d2e6b81b1c395b2e1054111b29c20a5189Ben Chan 130c3d707d1ae4198d5538ff4deccd729a83f1bc805Ben Chan#endif // SHILL_WIMAX_WIMAX_SERVICE_H_ 131