// 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 VM_TOOLS_SYSLOG_FORWARDER_H_
#define VM_TOOLS_SYSLOG_FORWARDER_H_

#include <memory>

#include <base/files/scoped_file.h>
#include <base/macros.h>
#include <grpcpp/grpcpp.h>
#include <vm_protos/proto_bindings/vm_host.grpc.pb.h>

namespace vm_tools {
namespace syslog {

// Responsible for collecting log records from the VM, scrubbing them,
// and then forwarding them to the host syslog daemon.
class Forwarder {
 public:
  explicit Forwarder(base::ScopedFD destination,
                     bool is_socket_destination = true);
  Forwarder(const Forwarder&) = delete;
  Forwarder& operator=(const Forwarder&) = delete;

  ~Forwarder() = default;

  // Common implementation for actually forwarding logs to the syslog daemon.
  grpc::Status ForwardLogs(int64_t cid, const vm_tools::LogRequest& request);

  void SetFileDestination(base::ScopedFD destination);
  bool is_socket_destination() const { return is_socket_destination_; }

 private:
  base::ScopedFD destination_;
  bool is_socket_destination_;
};

}  // namespace syslog
}  // namespace vm_tools

#endif  //  VM_TOOLS_SYSLOG_FORWARDER_H_
