// Copyright 2015 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.

[DartPackage="mojo",
 JavaPackage="org.chromium.mojo.bindings"]
module mojo;

// For each message pipe representing a user-defined interface, some control
// functions are provided at the same end of the message pipe as the
// user-defined interface, providing information about the user-defined
// interface and controlling behavior of the message pipe.

////////////////////////////////////////////////////////////////////////////////
// Run@0xFFFFFFFF(RunInput input) => (RunOutput? output);
//
// This control function runs the input command. If the command is not
// supported, |output| is set to null; otherwise |output| stores the result,
// whose type depends on the input.
//
// TODO(yzshen): Once union support is ready, switch the following definition
// to:
// struct RunMessageParams {
//   RunInput input;
// };
// union RunInput {
//   QueryVersion query_version;
// };
//
// struct RunResponseMessageParams {
//   RunOutput? output;
// };
// union RunOutput {
//   QueryVersionResult query_version_result;
// };

const uint32 kRunMessageId = 0xFFFFFFFF;

struct RunMessageParams {
  // The reserved fields make the layout compatible with the RunInput union
  // described above.
  uint32 reserved0;  // Must be set to 16.
  uint32 reserved1;  // Must be set to 0;
  QueryVersion query_version;
};

struct RunResponseMessageParams {
  // The reserved fields make the layout compatible with the RunOutput union
  // described above.
  uint32 reserved0;  // Must be set to 16.
  uint32 reserved1;  // Must be set to 0.
  QueryVersionResult query_version_result;
};

// Queries the max supported version of the user-defined interface.
struct QueryVersion {};
struct QueryVersionResult {
  uint32 version;
};

////////////////////////////////////////////////////////////////////////////////
// RunOrClosePipe@0xFFFFFFFE(RunOrClosePipeInput input);
//
// This control function runs the input command. If the operation fails or the
// command is not supported, the message pipe is closed.
//
// TODO(yzshen): Once union support is ready, switch the following definition
// to:
// struct RunOrClosePipeMessageParams {
//   RunOrClosePipeInput input;
// };
// union RunOrClosePipeInput {
//   RequireVersion require_version;
// };

const uint32 kRunOrClosePipeMessageId = 0xFFFFFFFE;

struct RunOrClosePipeMessageParams {
  // The reserved fields make the layout compatible with the RunOrClosePipeInput
  // union described above.
  uint32 reserved0;  // Must be set to 16.
  uint32 reserved1;  // Must be set to 0.
  RequireVersion require_version;
};

// If the specified version of the user-defined interface is not supported, the
// function fails and the pipe is closed.
struct RequireVersion {
  uint32 version;
};
