1 // 2 // Copyright (C) 2015 The Android Open Source Project 3 // 4 // Licensed under the Apache License, Version 2.0 (the "License"); 5 // you may not use this file except in compliance with the License. 6 // You may obtain a copy of the License at 7 // 8 // http://www.apache.org/licenses/LICENSE-2.0 9 // 10 // Unless required by applicable law or agreed to in writing, software 11 // distributed under the License is distributed on an "AS IS" BASIS, 12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 // See the License for the specific language governing permissions and 14 // limitations under the License. 15 // 16 17 #ifndef SHILL_WIFI_TDLS_MANAGER_H_ 18 #define SHILL_WIFI_TDLS_MANAGER_H_ 19 20 #include <map> 21 #include <string> 22 23 #include <base/cancelable_callback.h> 24 25 namespace shill { 26 27 class Error; 28 class EventDispatcher; 29 class SupplicantInterfaceProxyInterface; 30 31 // Manage TDLS peers for the specified interface |interface_name|. 32 class TDLSManager { 33 public: 34 TDLSManager(EventDispatcher* dispatcher, 35 SupplicantInterfaceProxyInterface* supplicant_interface_proxy, 36 const std::string& interface_name); 37 virtual ~TDLSManager(); 38 39 // Perform TDLS |operation| on |peer|. 40 virtual std::string PerformOperation(const std::string& peer_mac_address, 41 const std::string& operation, 42 Error* error); 43 44 // Called when a discover response for |peer_mac_address| is received. 45 virtual void OnDiscoverResponseReceived(const std::string& peer_mac_address); 46 interface_name()47 const std::string& interface_name() const { return interface_name_; } 48 49 private: 50 friend class TDLSManagerTest; 51 52 enum class PeerDiscoveryState { 53 kNone, 54 kRequestSent, 55 kResponseReceived 56 }; 57 58 static const int kPeerDiscoveryCleanupTimeoutSeconds; 59 60 // Discover TDLS service on a remote |peer_mac_address|. Returns true if 61 // operation is initiated successfully. 62 bool DiscoverPeer(const std::string& peer_mac_address); 63 64 // Setup a TDLS pairing with |peer_mac_address|. Returns true if operation is 65 // initiated successfully. 66 bool SetupPeer(const std::string& peer_mac_address); 67 68 // Tear down the TDLS pairing with |peer|. Returns true if operation is 69 // initiated successfully. 70 bool TearDownPeer(const std::string& peer_mac_address); 71 72 // Return a string indicating the TDLS status with |peer_mac_address|. 73 std::string PeerStatus(const std::string& peer_mac_address); 74 75 // Start the timer to delete any peer entries stored in our peer discovery 76 // map. 77 void StartPeerDiscoveryCleanupTimer(); 78 79 // Timeout handler to delete any peer entries from our peer discovery map. 80 void PeerDiscoveryCleanup(); 81 82 // Returns the TDLS discover status for this peer 83 PeerDiscoveryState CheckDiscoveryState(const std::string& peer_mac_address); 84 85 // Executes when the TDLS peer discovery cleanup timer expires. 86 base::CancelableClosure peer_discovery_cleanup_callback_; 87 88 // Maps peer to its discovery state. 89 std::map<std::string, PeerDiscoveryState> peer_discovery_state_; 90 91 EventDispatcher* dispatcher_; 92 SupplicantInterfaceProxyInterface* supplicant_interface_proxy_; 93 std::string interface_name_; 94 95 DISALLOW_COPY_AND_ASSIGN(TDLSManager); 96 }; 97 98 } // namespace shill 99 100 #endif // SHILL_WIFI_TDLS_MANAGER_H_ 101