You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
4.7 KiB
127 lines
4.7 KiB
7 months ago
|
// Copyright 2018 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.
|
||
|
|
||
|
#ifndef MOJO_PUBLIC_C_SYSTEM_QUOTA_H_
|
||
|
#define MOJO_PUBLIC_C_SYSTEM_QUOTA_H_
|
||
|
|
||
|
#include <stdint.h>
|
||
|
|
||
|
#include "mojo/public/c/system/macros.h"
|
||
|
#include "mojo/public/c/system/system_export.h"
|
||
|
#include "mojo/public/c/system/types.h"
|
||
|
|
||
|
// Flags passed to |MojoSetQuota| via |MojoSetQuotaOptions|.
|
||
|
typedef uint32_t MojoSetQuotaFlags;
|
||
|
|
||
|
// No flags.
|
||
|
#define MOJO_SET_QUOTA_FLAG_NONE ((MojoSetQuotaFlags)0)
|
||
|
|
||
|
// Options passed to |MojoSetQuota()|.
|
||
|
struct MOJO_ALIGNAS(8) MojoSetQuotaOptions {
|
||
|
// The size of this structure, used for versioning.
|
||
|
uint32_t struct_size;
|
||
|
|
||
|
// See |MojoSetQuotaFlags| above.
|
||
|
MojoSetQuotaFlags flags;
|
||
|
};
|
||
|
MOJO_STATIC_ASSERT(sizeof(MojoSetQuotaOptions) == 8,
|
||
|
"MojoSetQuotaOptions has wrong size.");
|
||
|
|
||
|
// Flags passed to |MojoQueryQuota| via |MojoQueryQuotaOptions|.
|
||
|
typedef uint32_t MojoQueryQuotaFlags;
|
||
|
|
||
|
// No flags.
|
||
|
#define MOJO_QUERY_QUOTA_FLAG_NONE ((MojoQueryQuotaFlags)0)
|
||
|
|
||
|
// Options passed to |MojoQueryQuota()|.
|
||
|
struct MOJO_ALIGNAS(8) MojoQueryQuotaOptions {
|
||
|
// The size of this structure, used for versioning.
|
||
|
uint32_t struct_size;
|
||
|
|
||
|
// See |MojoQueryQuotaFlags| above.
|
||
|
MojoQueryQuotaFlags flags;
|
||
|
};
|
||
|
MOJO_STATIC_ASSERT(sizeof(MojoQueryQuotaOptions) == 8,
|
||
|
"MojoQueryQuotaOptions has wrong size.");
|
||
|
|
||
|
// The maximum value any quota can be set to. Effectively means "no quota".
|
||
|
#define MOJO_QUOTA_LIMIT_NONE ((uint64_t)0xffffffffffffffff)
|
||
|
|
||
|
// An enumeration of different types of quotas that can be set on a handle.
|
||
|
typedef uint32_t MojoQuotaType;
|
||
|
|
||
|
// Limits the number of unread messages which can be queued on a message pipe
|
||
|
// endpoint before raising a |MOJO_HANDLE_SIGNAL_QUOTA_EXCEEDED| signal on that
|
||
|
// endpoint. May only be set on message pipe handles.
|
||
|
#define MOJO_QUOTA_TYPE_RECEIVE_QUEUE_LENGTH ((MojoQuotaType)0)
|
||
|
|
||
|
// Limits the total size (in bytes) of unread messages which can be queued on a
|
||
|
// message pipe endpoint before raising a |MOJO_HANDLE_SIGNAL_QUOTA_EXCEEDED|
|
||
|
// signal on that endpoint. May only be set on message pipe handles.
|
||
|
#define MOJO_QUOTA_TYPE_RECEIVE_QUEUE_MEMORY_SIZE ((MojoQuotaType)1)
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
// Sets a quota on a given handle which will cause that handle to raise the
|
||
|
// |MOJO_HANDLE_SIGNAL_QUOTA_EXCEEDED| signal if the quota is exceeded. Signals
|
||
|
// can be trapped using |MojoCreateTrap()| and related APIs (see trap.h).
|
||
|
//
|
||
|
// All quota limits on a handle default to |MOJO_QUOTA_LIMIT_NONE|, meaning that
|
||
|
// the resource is unlimited.
|
||
|
//
|
||
|
// NOTE: A handle's quota is only enforced as long as the handle remains within
|
||
|
// the process which set the quota.
|
||
|
//
|
||
|
// Parameters:
|
||
|
// |handle|: The handle on which a quota should be set.
|
||
|
// |type|: The type of quota to set. Certain types of quotas may only be set
|
||
|
// on certain types of handles. See notes on individual quota type
|
||
|
// definitions above for meaning and restrictions.
|
||
|
// |limit|: The limiting value of the quota. The meaning of this is determined
|
||
|
// by |type|. See notes on individual quota type definitions above.
|
||
|
// |options|: Additional options; may be null.
|
||
|
//
|
||
|
// Returns:
|
||
|
// |MOJO_RESULT_OK| if the quota was successfully set.
|
||
|
// |MOJO_RESULT_INVALID_ARGUMENT| if |handle| is not a valid handle value,
|
||
|
// |type| is not a known quota type, |options| is non-null but
|
||
|
// |*options| is malformed, or the quota |type| cannot be set on |handle|
|
||
|
// because the quota does not apply to that type of handle.
|
||
|
MOJO_SYSTEM_EXPORT MojoResult
|
||
|
MojoSetQuota(MojoHandle handle,
|
||
|
MojoQuotaType type,
|
||
|
uint64_t limit,
|
||
|
const struct MojoSetQuotaOptions* options);
|
||
|
|
||
|
// Queries a handle for information about a specific quota.
|
||
|
//
|
||
|
// Parameters:
|
||
|
// |handle|: The handle to query.
|
||
|
// |type|: The type of quota to query.
|
||
|
// |limit|: Receives the quota's currently set limit if non-null.
|
||
|
// |usage|: Receives the quota's current usage if non-null.
|
||
|
//
|
||
|
// Returns:
|
||
|
// |MOJO_RESULT_OK| if the quota was successfully queried on |handle|. Upon
|
||
|
// return, |*limit| contains the quota's current limit if |limit| is
|
||
|
// non-null, and |*usage| contains the quota's current usage if |usage| is
|
||
|
// non-null.
|
||
|
// |MOJO_RESULT_INVALID_ARGUMENT| if |handle| is not a valid handle value or
|
||
|
// quota |type| does not apply to the type of object referenced by
|
||
|
// |handle|.
|
||
|
MOJO_SYSTEM_EXPORT MojoResult
|
||
|
MojoQueryQuota(MojoHandle handle,
|
||
|
MojoQuotaType type,
|
||
|
const struct MojoQueryQuotaOptions* options,
|
||
|
uint64_t* limit,
|
||
|
uint64_t* usage);
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
} // extern "C"
|
||
|
#endif
|
||
|
|
||
|
#endif // MOJO_PUBLIC_C_SYSTEM_QUOTA_H_
|