// Copyright 2017 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 IMAGELOADER_HELPER_PROCESS_RECEIVER_H_
#define IMAGELOADER_HELPER_PROCESS_RECEIVER_H_

#include <memory>

#include <base/files/file_descriptor_watcher_posix.h>
#include <base/files/scoped_file.h>
#include <brillo/daemons/daemon.h>

#include "imageloader/ipc.pb.h"
#include "imageloader/verity_mounter.h"

struct cmsghdr;

namespace imageloader {

// Main loop for the Mount helper process.
// This object is used in the subprocess.
class HelperProcessReceiver : public brillo::Daemon {
 public:
  explicit HelperProcessReceiver(base::ScopedFD control_fd);
  HelperProcessReceiver(const HelperProcessReceiver&) = delete;
  HelperProcessReceiver& operator=(const HelperProcessReceiver&) = delete;

  // Helper function defined in helper_process_receiver_fuzzer.cc.
  friend void helper_process_receiver_fuzzer_run(const char*, size_t);

 protected:
  // Overrides Daemon init callback.
  int OnInit() override;

 private:
  void OnCommandReady();
  CommandResponse HandleCommand(const ImageCommand& image_command,
                                struct cmsghdr* cmsg);
  void SendResponse(const CommandResponse& response);

  base::ScopedFD control_fd_;
  std::unique_ptr<base::FileDescriptorWatcher::Controller> controller_;
  int pending_fd_;
  VerityMounter mounter_;
};

}  // namespace imageloader

#endif  // IMAGELOADER_HELPER_PROCESS_RECEIVER_H_
