// Copyright 2016 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 PATCHPANEL_HELPER_PROCESS_H_
#define PATCHPANEL_HELPER_PROCESS_H_

#include <sys/types.h>

#include <memory>
#include <string>
#include <vector>

#include <base/files/scoped_file.h>
#include <base/macros.h>
#include <google/protobuf/message_lite.h>

#include "patchpanel/message_dispatcher.h"

namespace patchpanel {

// Tracks a helper subprocess.  Handles forking, cleaning up on termination,
// and IPC.
// This object is used by the main Manager process.
class HelperProcess {
 public:
  HelperProcess() = default;
  HelperProcess(const HelperProcess&) = delete;
  HelperProcess& operator=(const HelperProcess&) = delete;

  virtual ~HelperProcess() = default;

  // Re-execs patchpanel with a new argument: "|fd_arg|=N", where N is the
  // side of |control_fd|.  This tells the subprocess to start up a different
  // mainloop.
  void Start(int argc, char* argv[], const std::string& fd_arg);

  // Attempts to restart the process with the original arguments.
  // Returns false if the maximum number of restarts has been exceeded.
  bool Restart();

  // Serializes a protobuf and sends it to the helper process.
  void SendMessage(const google::protobuf::MessageLite& proto) const;

  // Start listening on messages from subprocess and dispatching them to
  // handlers. This function can only be called after that the message loop of
  // main process is initialized.
  void Listen();

  void RegisterNDProxyMessageHandler(
      const base::Callback<void(const NDProxyMessage&)>& handler);

  pid_t pid() const { return pid_; }
  uint8_t restarts() const { return restarts_; }

 private:
  void Launch();

  pid_t pid_{0};
  uint8_t restarts_{0};
  std::vector<std::string> argv_;
  std::string fd_arg_;
  std::unique_ptr<MessageDispatcher> msg_dispatcher_;
};

}  // namespace patchpanel

#endif  // PATCHPANEL_HELPER_PROCESS_H_
