/*
 * Copyright (C) 2016 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 WIFICOND_AP_INTERFACE_BINDER_H_
#define WIFICOND_AP_INTERFACE_BINDER_H_

#include <android-base/macros.h>

#include "android/net/wifi/BnApInterface.h"
#include "android/net/wifi/IApInterfaceEventCallback.h"

namespace android {
namespace wificond {

class ApInterfaceImpl;

class ApInterfaceBinder : public android::net::wifi::BnApInterface {
 public:
  explicit ApInterfaceBinder(ApInterfaceImpl* impl);
  ~ApInterfaceBinder() override;

  // Called by |impl_| on its destruction.
  // This informs the binder proxy that no future manipulations of |impl_|
  // by remote processes are possible.
  void NotifyImplDead() { impl_ = nullptr; }

  // Called by |impl_| everytime number of associated stations changes.
  void NotifyNumAssociatedStationsChanged(int num_stations);

  binder::Status startHostapd(
      const sp<net::wifi::IApInterfaceEventCallback>& callback,
      bool* out_success) override;
  binder::Status stopHostapd(bool* out_success) override;
  binder::Status getInterfaceName(std::string* out_name) override;
  binder::Status getNumberOfAssociatedStations(
      int* out_num_of_stations) override;

 private:
  ApInterfaceImpl* impl_;

  android::sp<net::wifi::IApInterfaceEventCallback>
      ap_interface_event_callback_;

  DISALLOW_COPY_AND_ASSIGN(ApInterfaceBinder);
};

}  // namespace wificond
}  // namespace android

#endif  // WIFICOND_AP_INTERFACE_BINDER_H_
