// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This file contains Mojo system handle-related declarations/definitions.
//
// Note: This header should be compilable as C.

#ifndef MOJO_PUBLIC_C_SYSTEM_HANDLE_H_
#define MOJO_PUBLIC_C_SYSTEM_HANDLE_H_

#include <stdint.h>

#include "mojo/public/c/system/macros.h"
#include "mojo/public/c/system/result.h"

// |MojoHandle|: Handles to Mojo objects.
//   |MOJO_HANDLE_INVALID| - A value that is never a valid handle.

typedef uint32_t MojoHandle;

#define MOJO_HANDLE_INVALID ((MojoHandle)0)

// |MojoHandleRights|: Rights ("permissions") for handles. Each handle has a
// bitset of rights flags, which subsequently only be reduced. See each function
// for details about the right(s) required (some, like |MojoClose()|, require no
// rights).
//   |MOJO_HANDLE_RIGHT_NONE| - No rights.
//   |MOJO_HANDLE_RIGHT_DUPLICATE| - Right to duplicate a handle.
//   |MOJO_HANDLE_RIGHT_TRANSFER| - Right to transfer a handle (e.g., include in
//       a message).
//   |MOJO_HANDLE_RIGHT_READ| - Right to "read" from the handle (e.g., read a
//       message).
//   |MOJO_HANDLE_RIGHT_WRITE| - Right to "write" to the handle (e.g., write a
//       message).
//   |MOJO_HANDLE_RIGHT_GET_OPTIONS| - Right to get a handle's options.
//   |MOJO_HANDLE_RIGHT_SET_OPTIONS| - Right to set a handle's options.
//   |MOJO_HANDLE_RIGHT_MAP_READABLE| - Right to "map" a (e.g., buffer) handle
//       as readable memory.
//   |MOJO_HANDLE_RIGHT_MAP_WRITABLE| - Right to "map" a (e.g., buffer) handle
//       as writable memory.
//   |MOJO_HANDLE_RIGHT_MAP_EXECUTABLE| - Right to "map" a (e.g., buffer) handle
//       as executable memory.
//
// TODO(vtl): Add rights support/checking to existing handle types.

typedef uint32_t MojoHandleRights;

#define MOJO_HANDLE_RIGHT_NONE ((MojoHandleRights)0)
#define MOJO_HANDLE_RIGHT_DUPLICATE ((MojoHandleRights)1 << 0)
#define MOJO_HANDLE_RIGHT_TRANSFER ((MojoHandleRights)1 << 1)
#define MOJO_HANDLE_RIGHT_READ ((MojoHandleRights)1 << 2)
#define MOJO_HANDLE_RIGHT_WRITE ((MojoHandleRights)1 << 3)
#define MOJO_HANDLE_RIGHT_GET_OPTIONS ((MojoHandleRights)1 << 4)
#define MOJO_HANDLE_RIGHT_SET_OPTIONS ((MojoHandleRights)1 << 5)
#define MOJO_HANDLE_RIGHT_MAP_READABLE ((MojoHandleRights)1 << 6)
#define MOJO_HANDLE_RIGHT_MAP_WRITABLE ((MojoHandleRights)1 << 7)
#define MOJO_HANDLE_RIGHT_MAP_EXECUTABLE ((MojoHandleRights)1 << 8)

// |MojoHandleSignals|: Used to specify signals that can be waited on for a
// handle (and which can be triggered), e.g., the ability to read or write to
// the handle.
//   |MOJO_HANDLE_SIGNAL_NONE| - No flags. |MojoWait()|, etc. will return
//       |MOJO_RESULT_FAILED_PRECONDITION| if you attempt to wait on this.
//   |MOJO_HANDLE_SIGNAL_READABLE| - Can read (e.g., a message) from the handle.
//   |MOJO_HANDLE_SIGNAL_WRITABLE| - Can write (e.g., a message) to the handle.
//   |MOJO_HANDLE_SIGNAL_PEER_CLOSED| - The peer handle is closed.
//   |MOJO_HANDLE_SIGNAL_READ_THRESHOLD| - Can read a certain amount of data
//       from the handle (e.g., a data pipe consumer; see
//       |MojoDataPipeConsumerOptions|).

typedef uint32_t MojoHandleSignals;

#define MOJO_HANDLE_SIGNAL_NONE ((MojoHandleSignals)0)
#define MOJO_HANDLE_SIGNAL_READABLE ((MojoHandleSignals)1 << 0)
#define MOJO_HANDLE_SIGNAL_WRITABLE ((MojoHandleSignals)1 << 1)
#define MOJO_HANDLE_SIGNAL_PEER_CLOSED ((MojoHandleSignals)1 << 2)
#define MOJO_HANDLE_SIGNAL_READ_THRESHOLD ((MojoHandleSignals)1 << 3)
#define MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD ((MojoHandleSignals)1 << 4)

// |MojoHandleSignalsState|: Returned by wait functions to indicate the
// signaling state of handles. Members are as follows:
//   - |satisfied signals|: Bitmask of signals that were satisfied at some time
//         before the call returned.
//   - |satisfiable signals|: These are the signals that are possible to
//         satisfy. For example, if the return value was
//         |MOJO_RESULT_FAILED_PRECONDITION|, you can use this field to
//         determine which, if any, of the signals can still be satisfied.
// Note: This struct is not extensible (and only has 32-bit quantities), so it's
// 32-bit-aligned.

MOJO_STATIC_ASSERT(MOJO_ALIGNOF(uint32_t) == 4, "uint32_t has weird alignment");
struct MOJO_ALIGNAS(4) MojoHandleSignalsState {
  MojoHandleSignals satisfied_signals;
  MojoHandleSignals satisfiable_signals;
};
MOJO_STATIC_ASSERT(sizeof(MojoHandleSignalsState) == 8,
                   "MojoHandleSignalsState has wrong size");

MOJO_BEGIN_EXTERN_C

// |MojoClose()|: Closes the given |handle|.
//
// Returns:
//   |MOJO_RESULT_OK| on success.
//   |MOJO_RESULT_INVALID_ARGUMENT| if |handle| is not a valid handle.
//   |MOJO_RESULT_BUSY| if |handle| is currently in use in some transaction
//       (that, e.g., may result in it being invalidated, such as being sent in
//       a message).
//
// Concurrent operations on |handle| may succeed (or fail as usual) if they
// happen before the close, be cancelled with result |MOJO_RESULT_CANCELLED| if
// they properly overlap (this is likely the case with |MojoWait()|, etc.), or
// fail with |MOJO_RESULT_INVALID_ARGUMENT| if they happen after.
MojoResult MojoClose(MojoHandle handle);  // In.

// |MojoGetRights()|: Gets the given |handle|'s rights.
//
// On success, |*rights| (|rights| must be non-null) will be set to |handle|'s
// rights.
//
// Returns:
//   |MOJO_RESULT_OK| on success.
//   |MOJO_RESULT_INVALID_ARGUMENT| if |handle| is not a valid handle.
//   |MOJO_RESULT_BUSY| if |handle| is currently in use in some transaction
//       (that, e.g., may result in it being invalidated, such as being sent in
//       a message).
MojoResult MojoGetRights(MojoHandle handle, MojoHandleRights* rights);  // Out.

// |MojoReduceRights()|: Reduces rights that the given |handle| may have.
//
// That is, on success:
//
//   new rights = current rights & ~rights_to_remove.
//
// Note that it is not an error to "remove" rights that the handle does not
// (currently) possess.
//
// Returns:
//   |MOJO_RESULT_OK| on success.
//   |MOJO_RESULT_INVALID_ARGUMENT| if |handle| is not a valid handle.
//   |MOJO_RESULT_BUSY| if |handle| is currently in use in some transaction
//       (that, e.g., may result in it being invalidated, such as being sent in
//       a message).
//
// TODO(vtl): Discuss this API some more. It may be more desirable to replace
// the handle with a new one (with reduced rights).
MojoResult MojoReduceRights(MojoHandle handle,
                            MojoHandleRights rights_to_remove);

// |MojoDuplicateHandleWithReducedRights()|: Duplicates |handle| to a new handle
// with reduced rights. This requires |handle| to have the
// |MOJO_HANDLE_RIGHT_DUPLICATE| (note that some handle types may never have
// this right).
//
// The rights for the new handle are determined as in |MojoReduceRights()|. That
// is, on success:
//
//   new handle rights = original handle rights & ~rights_to_remove.
//
// Returns:
//   |MOJO_RESULT_OK| on success.
//   |MOJO_RESULT_INVALID_ARGUMENT| if |handle| is not a valid handle.
//   |MOJO_RESULT_PERMISSION_DENIED| if |handle| does not have the
//       |MOJO_HANDLE_RIGHT_DUPLICATE| right.
//   |MOJO_RESULT_RESOURCE_EXHAUSTED| if a process/system/quota/etc. limit has
//       been reached.
//   |MOJO_RESULT_BUSY| if |handle| is currently in use in some transaction
//       (that, e.g., may result in it being invalidated, such as being sent in
//       a message).
MojoResult MojoDuplicateHandleWithReducedRights(
    MojoHandle handle,
    MojoHandleRights rights_to_remove,
    MojoHandle* new_handle);  // Out.

// |MojoDuplicateHandle()|: Duplicates |handle| to a new handle with equivalent
// rights. This requires |handle| to have the |MOJO_HANDLE_RIGHT_DUPLICATE|.
// This is equivalent to |MojoDuplicateHandleWithReducedRights(handle,
// MOJO_HANDLE_RIGHT_NONE, new_handle)|.
//
// Returns:
//   |MOJO_RESULT_OK| on success.
//   |MOJO_RESULT_INVALID_ARGUMENT| if |handle| is not a valid handle.
//   |MOJO_RESULT_PERMISSION_DENIED| if |handle| does not have the
//       |MOJO_HANDLE_RIGHT_DUPLICATE| right.
//   |MOJO_RESULT_RESOURCE_EXHAUSTED| if a process/system/quota/etc. limit has
//       been reached.
//   |MOJO_RESULT_BUSY| if |handle| is currently in use in some transaction
//       (that, e.g., may result in it being invalidated, such as being sent in
//       a message).
MojoResult MojoDuplicateHandle(MojoHandle handle,
                               MojoHandle* new_handle);  // Out.

MOJO_END_EXTERN_C

#endif  // MOJO_PUBLIC_C_SYSTEM_HANDLE_H_
