/*
 * 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 CAMERA_INCLUDE_CROS_CAMERA_IPC_UTIL_H_
#define CAMERA_INCLUDE_CROS_CAMERA_IPC_UTIL_H_

#include <string>

#include <base/files/scoped_file.h>
#include <mojo/edk/embedder/embedder.h>

namespace base {
class FilePath;
}  // namespace base

namespace cros {

bool CreateServerUnixDomainSocket(const base::FilePath& socket_path,
                                  int* server_listen_fd);

bool ServerAcceptConnection(int server_listen_fd, int* server_socket);

base::ScopedFD CreateClientUnixDomainSocket(const base::FilePath& socket_path);

MojoResult CreateMojoChannelToParentByUnixDomainSocket(
    const base::FilePath& socket_path,
    mojo::ScopedMessagePipeHandle* child_pipe);

MojoResult CreateMojoChannelToChildByUnixDomainSocket(
    const base::FilePath& socket_path,
    mojo::ScopedMessagePipeHandle* parent_pipe);

mojo::ScopedHandle WrapPlatformHandle(int handle);
int UnwrapPlatformHandle(mojo::ScopedHandle handle);

}  // namespace cros

#endif  // CAMERA_INCLUDE_CROS_CAMERA_IPC_UTIL_H_
