// // Copyright (C) 2015 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_WIFI_TDLS_MANAGER_H_ #define SHILL_WIFI_TDLS_MANAGER_H_ #include #include #include namespace shill { class Error; class EventDispatcher; class SupplicantInterfaceProxyInterface; // Manage TDLS peers for the specified interface |interface_name|. class TDLSManager { public: TDLSManager(EventDispatcher* dispatcher, SupplicantInterfaceProxyInterface* supplicant_interface_proxy, const std::string& interface_name); virtual ~TDLSManager(); // Perform TDLS |operation| on |peer|. virtual std::string PerformOperation(const std::string& peer_mac_address, const std::string& operation, Error* error); // Called when a discover response for |peer_mac_address| is received. virtual void OnDiscoverResponseReceived(const std::string& peer_mac_address); const std::string& interface_name() const { return interface_name_; } private: friend class TDLSManagerTest; enum class PeerDiscoveryState { kNone, kRequestSent, kResponseReceived }; static const int kPeerDiscoveryCleanupTimeoutSeconds; // Discover TDLS service on a remote |peer_mac_address|. Returns true if // operation is initiated successfully. bool DiscoverPeer(const std::string& peer_mac_address); // Setup a TDLS pairing with |peer_mac_address|. Returns true if operation is // initiated successfully. bool SetupPeer(const std::string& peer_mac_address); // Tear down the TDLS pairing with |peer|. Returns true if operation is // initiated successfully. bool TearDownPeer(const std::string& peer_mac_address); // Return a string indicating the TDLS status with |peer_mac_address|. std::string PeerStatus(const std::string& peer_mac_address); // Start the timer to delete any peer entries stored in our peer discovery // map. void StartPeerDiscoveryCleanupTimer(); // Timeout handler to delete any peer entries from our peer discovery map. void PeerDiscoveryCleanup(); // Returns the TDLS discover status for this peer PeerDiscoveryState CheckDiscoveryState(const std::string& peer_mac_address); // Executes when the TDLS peer discovery cleanup timer expires. base::CancelableClosure peer_discovery_cleanup_callback_; // Maps peer to its discovery state. std::map peer_discovery_state_; EventDispatcher* dispatcher_; SupplicantInterfaceProxyInterface* supplicant_interface_proxy_; std::string interface_name_; DISALLOW_COPY_AND_ASSIGN(TDLSManager); }; } // namespace shill #endif // SHILL_WIFI_TDLS_MANAGER_H_