// 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() = default;

  virtual bool AddNetwork(const KeyValueStore& args,
                          RpcIdentifier* network) = 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 RpcIdentifier& 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 RpcIdentifier& network) = 0;
  virtual bool Roam(const std::string& addr) = 0;
  virtual bool Scan(const KeyValueStore& args) = 0;
  virtual bool SelectNetwork(const RpcIdentifier& network) = 0;
  virtual bool SetFastReauth(bool enabled) = 0;
  virtual bool SetScanInterval(int seconds) = 0;
  virtual bool SetScan(bool enable) = 0;
  virtual bool EnableMacAddressRandomization(
      const std::vector<unsigned char>& mask, bool sched_scan) = 0;
  virtual bool DisableMacAddressRandomization() = 0;
};

}  // namespace shill

#endif  // SHILL_SUPPLICANT_SUPPLICANT_INTERFACE_PROXY_INTERFACE_H_
