// 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_RPC_TASK_H_
#define SHILL_RPC_TASK_H_

#include <map>
#include <memory>
#include <string>

#include <base/macros.h>

#include "shill/data_types.h"

namespace shill {

// Declared in the header to avoid linking unused code into shims.
static const char kRpcTaskServiceVariable[] = "SHILL_TASK_SERVICE";
static const char kRpcTaskPathVariable[] = "SHILL_TASK_PATH";

class ControlInterface;
class RpcTaskAdaptorInterface;

class RpcTaskDelegate {
 public:
  virtual ~RpcTaskDelegate() = default;

  virtual void GetLogin(std::string* user, std::string* password) = 0;
  virtual void Notify(const std::string& reason,
                      const std::map<std::string, std::string>& dict) = 0;
};

// RPC tasks are currently used by VPN drivers for communication with external
// VPN processes. The RPC task should be owned by a single owner -- its
// RpcTaskDelegate -- so no need to be reference counted.
class RpcTask {
 public:
  // A constructor for the RpcTask object.
  RpcTask(ControlInterface* control_interface, RpcTaskDelegate* delegate);
  RpcTask(const RpcTask&) = delete;
  RpcTask& operator=(const RpcTask&) = delete;

  virtual ~RpcTask();

  virtual void GetLogin(std::string* user, std::string* password) const;
  virtual void Notify(const std::string& reason,
                      const std::map<std::string, std::string>& dict);

  // Returns a string that is guaranteed to uniquely identify this RpcTask
  // instance.
  const std::string& UniqueName() const { return unique_name_; }

  // Generates environment variable strings for a child process to
  // communicate back to us over RPC.
  virtual std::map<std::string, std::string> GetEnvironment() const;
  const RpcIdentifier& GetRpcIdentifier() const;
  const RpcIdentifier& GetRpcConnectionIdentifier() const;

 private:
  RpcTaskDelegate* delegate_;
  static unsigned int serial_number_;
  std::string unique_name_;  // MUST be unique amongst RPC task instances
  std::unique_ptr<RpcTaskAdaptorInterface> adaptor_;
};

}  // namespace shill

#endif  // SHILL_RPC_TASK_H_
