chromium/mojo/core/ipcz_api.h

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

#ifndef MOJO_CORE_IPCZ_API_H_
#define MOJO_CORE_IPCZ_API_H_

#include "mojo/core/system_impl_export.h"
#include "third_party/ipcz/include/ipcz/ipcz.h"

namespace mojo::core {

// Returns a reference to the global ipcz implementation.
MOJO_SYSTEM_IMPL_EXPORT const IpczAPI& GetIpczAPI();

// Returns a handle to the global ipcz node for the calling process, as
// initialized by InitializeIpczForProcess().
MOJO_SYSTEM_IMPL_EXPORT IpczHandle GetIpczNode();

// Initializes a global ipcz node for the calling process with a set of options
// to configure the node.
struct IpczNodeOptions {};
MOJO_SYSTEM_IMPL_EXPORT bool InitializeIpczNodeForProcess(
    const IpczNodeOptions& options = {});

// Used by tests to tear down global state initialized by
// InitializeIpczNodeForProcess().
MOJO_SYSTEM_IMPL_EXPORT void DestroyIpczNodeForProcess();

// Retrieves the global ipcz node options configured by a call to
// InitializeIpczNodeForProcess().
MOJO_SYSTEM_IMPL_EXPORT const IpczNodeOptions& GetIpczNodeOptions();

}  // namespace mojo::core

#endif  // MOJO_CORE_IPCZ_API_H_