blob: 68041fec2711612c584c3fb735e5087fa91330b4 [file] [log] [blame]
/*
* Copyright (c) 2013 The Native Client 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 _NATIVE_CLIENT_SRC_PUBLIC_IMC_SYSCALLS_H_
#define _NATIVE_CLIENT_SRC_PUBLIC_IMC_SYSCALLS_H_
/*
* IMC API for NaCl-sandboxed code.
* The functions declared here are available via -limc_syscalls.
*/
#ifdef __cplusplus
extern "C" {
#endif
struct NaClAbiNaClImcMsgHdr; /* imc_types.h */
/**
* @nacl
* Creates a bound IMC socket and returns a descriptor for the socket and the
* socket address.
* @param sock_and_addr An array of two file descriptors. On successful
* return, the first is set to the descriptor of the bound socket, and can be
* used for, e.g., imc_accept. On successful return, the second descriptor is
* set to a socket address object that may be sent to other NativeClient
* modules or the browser plugin.
* @return On success, imcmakeboundsock returns zero. On failure, it returns
* -1 and sets errno appropriately.
*/
extern int imc_makeboundsock(int sock_and_addr[2]);
/**
* @nacl
* Accepts a connection on a bound IMC socket, returning a connected IMC socket
* descriptor.
* @param desc The file descriptor of an IMC bound socket.
* @return On success, imc_accept returns a non-negative file descriptor for
* the connected socket. On failure, it returns -1 and sets errno
* appropriately.
*/
extern int imc_accept(int desc);
/**
* @nacl
* Connects to an IMC socket address, returning a connected IMC socket
* descriptor.
* @param desc The file descriptor of an IMC socket address.
* @return On success, imc_connect returns a non-negative file descriptor for
* the connected socket. On failure, it returns -1 and sets errno.
* The returned descriptor may be used to transfer data and descriptors
* but is itself not transferable.
* appropriately.
*/
extern int imc_connect(int desc);
/**
* @nacl
* Sends a message over a specified IMC socket descriptor.
* descriptor.
* @param desc The file descriptor of an IMC socket.
* @param nmhp The message header structure containing information to be sent.
* @param flags TBD
* @return On success, imc_sendmsg returns a non-negative number of bytes sent
* to the socket. On failure, it returns -1 and sets errno appropriately.
* The returned descriptor may be used to transfer data and descriptors
* but is itself not transferable.
*/
extern int imc_sendmsg(int desc, const struct NaClAbiNaClImcMsgHdr *nmhp,
int flags);
/**
* @nacl
* Receives a message over a specified IMC socket descriptor.
* @param desc The file descriptor of an IMC socket.
* @param nmhp The message header structure to be populated when receiving the
* message.
* @param flags TBD
* @return On success, imc_recvmsg returns a non-negative number of bytes
* read. On failure, it returns -1 and sets errno appropriately.
*/
extern int imc_recvmsg(int desc, struct NaClAbiNaClImcMsgHdr *nmhp, int flags);
/**
* @nacl
* Creates an IMC shared memory region, returning a file descriptor.
* @param nbytes The number of bytes in the requested shared memory region.
* @return On success, imc_mem_obj_create returns a non-negative file
* descriptor for the shared memory region. On failure, it returns -1 and
* sets errno appropriately.
*/
extern int imc_mem_obj_create(size_t nbytes);
/**
* @nacl
* Creates an IMC socket pair, returning a pair of file descriptors.
* These descriptors are data-only, i.e., they may be used with
* imc_sendmsg and imc_recvmsg, but only if the descriptor count
* (desc_length) is zero.
* @param pair An array of two file descriptors for the two ends of the
* socket.
* @return On success imc_socketpair returns zero. On failure, it returns -1
* and sets errno appropriately.
* The returned descriptor may only be used to transfer data
* and is itself transferable.
*/
extern int imc_socketpair(int pair[2]);
#ifdef __cplusplus
}
#endif
#endif