// Copyright 2018 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SHILL_SUPPLICANT_SUPPLICANT_INTERFACE_PROXY_INTERFACE_H_
#define SHILL_SUPPLICANT_SUPPLICANT_INTERFACE_PROXY_INTERFACE_H_

#include <string>
#include <vector>

#include "shill/key_value_store.h"

namespace shill {

// SupplicantInterfaceProxyInterface declares only the subset of
// fi::w1::wpa_supplicant1::Interface_proxy that is actually used by WiFi.
class SupplicantInterfaceProxyInterface {
 public:
  virtual ~SupplicantInterfaceProxyInterface() {}

  virtual bool AddNetwork(const KeyValueStore& args,
                          std::string* network) = 0;
  virtual bool EnableHighBitrates() = 0;
  virtual bool EAPLogoff() = 0;
  virtual bool EAPLogon() = 0;
  virtual bool Disconnect() = 0;
  virtual bool FlushBSS(const uint32_t& age) = 0;
  virtual bool NetworkReply(const std::string& network,
                            const std::string& field,
                            const std::string& value) = 0;
  virtual bool Reassociate() = 0;
  virtual bool Reattach() = 0;
  virtual bool RemoveAllNetworks() = 0;
  virtual bool RemoveNetwork(const std::string& network) = 0;
  virtual bool Roam(const std::string& addr) = 0;
  virtual bool Scan(const KeyValueStore& args) = 0;
  virtual bool SelectNetwork(const std::string& network) = 0;
  virtual bool SetFastReauth(bool enabled) = 0;
  virtual bool SetRoamThreshold(uint16_t seconds) = 0;
  virtual bool SetScanInterval(int seconds) = 0;
  virtual bool SetDisableHighBitrates(bool disable_high_bitrates) = 0;
  virtual bool SetSchedScan(bool enable) = 0;
  virtual bool SetScan(bool enable) = 0;
  virtual bool TDLSDiscover(const std::string& peer) = 0;
  virtual bool TDLSSetup(const std::string& peer) = 0;
  virtual bool TDLSStatus(const std::string& peer,
                                      std::string* status) = 0;
  virtual bool TDLSTeardown(const std::string& peer) = 0;
  virtual bool SetHT40Enable(const std::string& network, bool enable) = 0;
  virtual bool EnableMACAddressRandomization(
      const std::vector<unsigned char>& mask) = 0;
  virtual bool DisableMACAddressRandomization() = 0;
};

}  // namespace shill

#endif  // SHILL_SUPPLICANT_SUPPLICANT_INTERFACE_PROXY_INTERFACE_H_
