// // Copyright (C) 2012 The Android Open Source Project // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef SHILL_WIMAX_WIMAX_H_ #define SHILL_WIMAX_WIMAX_H_ #include <memory> #include <set> #include <string> #include <base/cancelable_callback.h> #include <base/memory/weak_ptr.h> #if defined(__ANDROID__) #include <dbus/service_constants.h> #else #include <chromeos/dbus/service_constants.h> #endif // __ANDROID__ #include <gtest/gtest_prod.h> // for FRIEND_TEST #include "shill/device.h" namespace shill { class WiMaxDeviceProxyInterface; class WiMax : public Device { public: WiMax(ControlInterface* control, EventDispatcher* dispatcher, Metrics* metrics, Manager* manager, const std::string& link_name, const std::string& address, int interface_index, const RpcIdentifier& path); ~WiMax() override; // Inherited from Device. void Start(Error* error, const EnabledStateChangedCallback& callback) override; void Stop(Error* error, const EnabledStateChangedCallback& callback) override; void Scan(ScanType /*scan_type*/, Error* error, const std::string& /*reason*/) override; virtual void ConnectTo(const WiMaxServiceRefPtr& service, Error* error); virtual void DisconnectFrom(const ServiceRefPtr& service, Error* error); // Signaled by |service| when stopped. virtual void OnServiceStopped(const WiMaxServiceRefPtr& service); // Signaled by WiMaxProvider when the RPC device disappears. The provider will // deregister and destroy the device after invoking this method. virtual void OnDeviceVanished(); // Returns true if this device is not connecting or connected to a service. virtual bool IsIdle() const; const RpcIdentifier& path() const { return path_; } bool scanning() const { return scanning_; } const std::set<RpcIdentifier>& networks() const { return networks_; } private: friend class WiMaxTest; FRIEND_TEST(WiMaxProviderTest, OnNetworksChanged); FRIEND_TEST(WiMaxTest, ConnectTimeout); FRIEND_TEST(WiMaxTest, ConnectTo); FRIEND_TEST(WiMaxTest, DropService); FRIEND_TEST(WiMaxTest, IsIdle); FRIEND_TEST(WiMaxTest, OnConnectComplete); FRIEND_TEST(WiMaxTest, OnDeviceVanished); FRIEND_TEST(WiMaxTest, OnEnableComplete); FRIEND_TEST(WiMaxTest, OnNetworksChanged); FRIEND_TEST(WiMaxTest, OnServiceStopped); FRIEND_TEST(WiMaxTest, OnStatusChanged); FRIEND_TEST(WiMaxTest, StartStop); static const int kDefaultConnectTimeoutSeconds; static const int kDefaultRPCTimeoutSeconds; void OnScanNetworksComplete(const Error& error); void OnConnectComplete(const Error& error); void OnDisconnectComplete(const Error& error); void OnEnableComplete(const EnabledStateChangedCallback& callback, const Error& error); void OnDisableComplete(const EnabledStateChangedCallback& callback, const Error& error); void OnNetworksChanged(const RpcIdentifiers& networks); void OnStatusChanged(wimax_manager::DeviceStatus status); void DropService(Service::ConnectState state); // Initializes a callback that will invoke OnConnectTimeout. The timeout will // not be restarted if it's already scheduled. void StartConnectTimeout(); // Cancels the connect timeout callback, if any, previously scheduled through // StartConnectTimeout. void StopConnectTimeout(); // Returns true if a connect timeout is scheduled, false otherwise. bool IsConnectTimeoutStarted() const; // Called if a connect timeout scheduled through StartConnectTimeout // fires. Marks the callback as stopped and invokes DropService. void OnConnectTimeout(); const RpcIdentifier path_; base::WeakPtrFactory<WiMax> weak_ptr_factory_; std::unique_ptr<WiMaxDeviceProxyInterface> proxy_; bool scanning_; WiMaxServiceRefPtr pending_service_; std::set<RpcIdentifier> networks_; wimax_manager::DeviceStatus status_; base::CancelableClosure connect_timeout_callback_; int connect_timeout_seconds_; DISALLOW_COPY_AND_ASSIGN(WiMax); }; } // namespace shill #endif // SHILL_WIMAX_WIMAX_H_