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

#include <string>
#include <utility>
#include <vector>

#include <base/optional.h>
#include <base/files/scoped_file.h>

namespace base {
class FilePath;
}  // namespace base

namespace arc {

// Creates a pair of pipe file descriptors, and returns it.
// Returns nullopt if failed.
base::Optional<std::pair<base::ScopedFD, base::ScopedFD>> CreatePipe();

// Creates a pair of socketpair file desciprotrs, and returns it.
// Returns nullopt if failed.
base::Optional<std::pair<base::ScopedFD, base::ScopedFD>> CreateSocketPair(
    int type);

// Creates a socket at |path|, and starts listening.
base::ScopedFD CreateUnixDomainSocket(const base::FilePath& path);

// Accepts a connection request to |raw_fd|, and returns the connected file
// descriptor.
base::ScopedFD AcceptSocket(int raw_fd);

// Connects to a unix domain socket at |path|. Returns errno (which is 0 on
// success), and the connected fd if succeeded.
// Note: in C++17, the return type should be std::variant<int, base::ScopedFD>.
std::pair<int, base::ScopedFD> ConnectUnixDomainSocket(
    const base::FilePath& path);

// Returns the type of the socket.
int GetSocketType(int fd);

// Calls sendmsg and returns the number of bytes sent on success.
// On error, returns -1 and sets errno appropriately.
ssize_t Sendmsg(int fd,
                const void* buf,
                size_t length,
                const std::vector<base::ScopedFD>& fds);

// Calls recvmsg and returns the number of bytes received on success.
// On error, returns -1 and sets errno appropriately.
ssize_t Recvmsg(int fd,
                void* buf,
                size_t length,
                std::vector<base::ScopedFD>* fds);

}  // namespace arc

#endif  // ARC_VM_MOJO_PROXY_FILE_DESCRIPTOR_UTIL_H_
