// 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_DBUS_THIRD_PARTY_VPN_DBUS_ADAPTOR_H_
#define SHILL_DBUS_THIRD_PARTY_VPN_DBUS_ADAPTOR_H_

#include <map>
#include <string>
#include <vector>

#include <base/callback.h>
#include <base/memory/ref_counted.h>

#include "dbus_bindings/org.chromium.flimflam.ThirdPartyVpn.h"
#include "shill/adaptor_interfaces.h"
#include "shill/dbus/dbus_adaptor.h"

namespace shill {

class ThirdPartyVpnDriver;

class ThirdPartyVpnDBusAdaptor
    : public org::chromium::flimflam::ThirdPartyVpnAdaptor,
      public org::chromium::flimflam::ThirdPartyVpnInterface,
      public DBusAdaptor,
      public ThirdPartyVpnAdaptorInterface {
 public:
  enum ExternalConnectState {
    kStateConnected = 1,
    kStateFailure,
  };

  ThirdPartyVpnDBusAdaptor(const scoped_refptr<dbus::Bus>& bus,
                           ThirdPartyVpnDriver* client);
  ThirdPartyVpnDBusAdaptor(const ThirdPartyVpnDBusAdaptor&) = delete;
  ThirdPartyVpnDBusAdaptor& operator=(const ThirdPartyVpnDBusAdaptor&) = delete;

  ~ThirdPartyVpnDBusAdaptor() override;

  // Implementation of ThirdPartyVpnAdaptorInterface
  void EmitPacketReceived(const std::vector<uint8_t>& packet) override;
  void EmitPlatformMessage(uint32_t message) override;

  // Implementation of org::chromium::flimflam::ThirdPartyVpnAdaptor
  bool SetParameters(brillo::ErrorPtr* error,
                     const std::map<std::string, std::string>& parameters,
                     std::string* warning_message) override;
  bool UpdateConnectionState(brillo::ErrorPtr* error,
                             uint32_t connection_state) override;
  bool SendPacket(brillo::ErrorPtr* error,
                  const std::vector<uint8_t>& ip_packet) override;

 private:
  ThirdPartyVpnDriver* client_;
};

}  // namespace shill

#endif  // SHILL_DBUS_THIRD_PARTY_VPN_DBUS_ADAPTOR_H_
