//
// Copyright (C) 2017 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// @generated by protoc-gen-es v2.2.2 with parameter "target=ts"
// @generated from file protos/perfetto/ipc/wire_protocol.proto (package perfetto.protos, syntax proto2)
/* eslint-disable */

import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv1";
import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv1";
import type { Message } from "@bufbuild/protobuf";

/**
 * Describes the file protos/perfetto/ipc/wire_protocol.proto.
 */
export const file_protos_perfetto_ipc_wire_protocol: GenFile = /*@__PURE__*/
  fileDesc("Cidwcm90b3MvcGVyZmV0dG8vaXBjL3dpcmVfcHJvdG9jb2wucHJvdG8SD3BlcmZldHRvLnByb3RvcyLSBwoISVBDRnJhbWUSEgoKcmVxdWVzdF9pZBgCIAEoBBJBChBtc2dfYmluZF9zZXJ2aWNlGAMgASgLMiUucGVyZmV0dG8ucHJvdG9zLklQQ0ZyYW1lLkJpbmRTZXJ2aWNlSAASTAoWbXNnX2JpbmRfc2VydmljZV9yZXBseRgEIAEoCzIqLnBlcmZldHRvLnByb3Rvcy5JUENGcmFtZS5CaW5kU2VydmljZVJlcGx5SAASQwoRbXNnX2ludm9rZV9tZXRob2QYBSABKAsyJi5wZXJmZXR0by5wcm90b3MuSVBDRnJhbWUuSW52b2tlTWV0aG9kSAASTgoXbXNnX2ludm9rZV9tZXRob2RfcmVwbHkYBiABKAsyKy5wZXJmZXR0by5wcm90b3MuSVBDRnJhbWUuSW52b2tlTWV0aG9kUmVwbHlIABJDChFtc2dfcmVxdWVzdF9lcnJvchgHIAEoCzImLnBlcmZldHRvLnByb3Rvcy5JUENGcmFtZS5SZXF1ZXN0RXJyb3JIABJGChFzZXRfcGVlcl9pZGVudGl0eRgIIAEoCzIpLnBlcmZldHRvLnByb3Rvcy5JUENGcmFtZS5TZXRQZWVySWRlbnRpdHlIABIYChBkYXRhX2Zvcl90ZXN0aW5nGAEgAygMGiMKC0JpbmRTZXJ2aWNlEhQKDHNlcnZpY2VfbmFtZRgBIAEoCRqnAQoQQmluZFNlcnZpY2VSZXBseRIPCgdzdWNjZXNzGAEgASgIEhIKCnNlcnZpY2VfaWQYAiABKA0SRgoHbWV0aG9kcxgDIAMoCzI1LnBlcmZldHRvLnByb3Rvcy5JUENGcmFtZS5CaW5kU2VydmljZVJlcGx5Lk1ldGhvZEluZm8aJgoKTWV0aG9kSW5mbxIKCgJpZBgBIAEoDRIMCgRuYW1lGAIgASgJGl0KDEludm9rZU1ldGhvZBISCgpzZXJ2aWNlX2lkGAEgASgNEhEKCW1ldGhvZF9pZBgCIAEoDRISCgphcmdzX3Byb3RvGAMgASgMEhIKCmRyb3BfcmVwbHkYBCABKAgaSwoRSW52b2tlTWV0aG9kUmVwbHkSDwoHc3VjY2VzcxgBIAEoCBIQCghoYXNfbW9yZRgCIAEoCBITCgtyZXBseV9wcm90bxgDIAEoDBodCgxSZXF1ZXN0RXJyb3ISDQoFZXJyb3IYASABKAkaRAoPU2V0UGVlcklkZW50aXR5EgsKA3BpZBgBIAEoBRILCgN1aWQYAiABKAUSFwoPbWFjaGluZV9pZF9oaW50GAMgASgJQgUKA21zZw");

/**
 * @generated from message perfetto.protos.IPCFrame
 */
export type IPCFrame = Message<"perfetto.protos.IPCFrame"> & {
  /**
   * The client is expected to send requests with monotonically increasing
   * request_id. The host will match the request_id sent from the client.
   * In the case of a Streaming response (has_more = true) the host will send
   * several InvokeMethodReply with the same request_id.
   *
   * @generated from field: optional uint64 request_id = 2;
   */
  requestId: bigint;

  /**
   * @generated from oneof perfetto.protos.IPCFrame.msg
   */
  msg: {
    /**
     * @generated from field: perfetto.protos.IPCFrame.BindService msg_bind_service = 3;
     */
    value: IPCFrame_BindService;
    case: "msgBindService";
  } | {
    /**
     * @generated from field: perfetto.protos.IPCFrame.BindServiceReply msg_bind_service_reply = 4;
     */
    value: IPCFrame_BindServiceReply;
    case: "msgBindServiceReply";
  } | {
    /**
     * @generated from field: perfetto.protos.IPCFrame.InvokeMethod msg_invoke_method = 5;
     */
    value: IPCFrame_InvokeMethod;
    case: "msgInvokeMethod";
  } | {
    /**
     * @generated from field: perfetto.protos.IPCFrame.InvokeMethodReply msg_invoke_method_reply = 6;
     */
    value: IPCFrame_InvokeMethodReply;
    case: "msgInvokeMethodReply";
  } | {
    /**
     * @generated from field: perfetto.protos.IPCFrame.RequestError msg_request_error = 7;
     */
    value: IPCFrame_RequestError;
    case: "msgRequestError";
  } | {
    /**
     * @generated from field: perfetto.protos.IPCFrame.SetPeerIdentity set_peer_identity = 8;
     */
    value: IPCFrame_SetPeerIdentity;
    case: "setPeerIdentity";
  } | { case: undefined; value?: undefined };

  /**
   * Used only in unittests to generate a parsable message of arbitrary size.
   *
   * @generated from field: repeated bytes data_for_testing = 1;
   */
  dataForTesting: Uint8Array[];
};

/**
 * Describes the message perfetto.protos.IPCFrame.
 * Use `create(IPCFrameSchema)` to create a new message.
 */
export const IPCFrameSchema: GenMessage<IPCFrame> = /*@__PURE__*/
  messageDesc(file_protos_perfetto_ipc_wire_protocol, 0);

/**
 * Client -> Host.
 *
 * @generated from message perfetto.protos.IPCFrame.BindService
 */
export type IPCFrame_BindService = Message<"perfetto.protos.IPCFrame.BindService"> & {
  /**
   * @generated from field: optional string service_name = 1;
   */
  serviceName: string;
};

/**
 * Describes the message perfetto.protos.IPCFrame.BindService.
 * Use `create(IPCFrame_BindServiceSchema)` to create a new message.
 */
export const IPCFrame_BindServiceSchema: GenMessage<IPCFrame_BindService> = /*@__PURE__*/
  messageDesc(file_protos_perfetto_ipc_wire_protocol, 0, 0);

/**
 * Host -> Client.
 *
 * @generated from message perfetto.protos.IPCFrame.BindServiceReply
 */
export type IPCFrame_BindServiceReply = Message<"perfetto.protos.IPCFrame.BindServiceReply"> & {
  /**
   * @generated from field: optional bool success = 1;
   */
  success: boolean;

  /**
   * @generated from field: optional uint32 service_id = 2;
   */
  serviceId: number;

  /**
   * @generated from field: repeated perfetto.protos.IPCFrame.BindServiceReply.MethodInfo methods = 3;
   */
  methods: IPCFrame_BindServiceReply_MethodInfo[];
};

/**
 * Describes the message perfetto.protos.IPCFrame.BindServiceReply.
 * Use `create(IPCFrame_BindServiceReplySchema)` to create a new message.
 */
export const IPCFrame_BindServiceReplySchema: GenMessage<IPCFrame_BindServiceReply> = /*@__PURE__*/
  messageDesc(file_protos_perfetto_ipc_wire_protocol, 0, 1);

/**
 * @generated from message perfetto.protos.IPCFrame.BindServiceReply.MethodInfo
 */
export type IPCFrame_BindServiceReply_MethodInfo = Message<"perfetto.protos.IPCFrame.BindServiceReply.MethodInfo"> & {
  /**
   * @generated from field: optional uint32 id = 1;
   */
  id: number;

  /**
   * @generated from field: optional string name = 2;
   */
  name: string;
};

/**
 * Describes the message perfetto.protos.IPCFrame.BindServiceReply.MethodInfo.
 * Use `create(IPCFrame_BindServiceReply_MethodInfoSchema)` to create a new message.
 */
export const IPCFrame_BindServiceReply_MethodInfoSchema: GenMessage<IPCFrame_BindServiceReply_MethodInfo> = /*@__PURE__*/
  messageDesc(file_protos_perfetto_ipc_wire_protocol, 0, 1, 0);

/**
 * Client -> Host.
 *
 * @generated from message perfetto.protos.IPCFrame.InvokeMethod
 */
export type IPCFrame_InvokeMethod = Message<"perfetto.protos.IPCFrame.InvokeMethod"> & {
  /**
   * BindServiceReply.id.
   *
   * @generated from field: optional uint32 service_id = 1;
   */
  serviceId: number;

  /**
   * BindServiceReply.method.id.
   *
   * @generated from field: optional uint32 method_id = 2;
   */
  methodId: number;

  /**
   * Proto-encoded request argument.
   *
   * @generated from field: optional bytes args_proto = 3;
   */
  argsProto: Uint8Array;

  /**
   * When true the client specifies that a reply is not needed. The use case
   * is a method with an empty, where the client doesn't care about the
   * success/failure of the method invocation and rather prefers avoiding the
   * IPC roundtrip + context switch associated with the reply.
   *
   * @generated from field: optional bool drop_reply = 4;
   */
  dropReply: boolean;
};

/**
 * Describes the message perfetto.protos.IPCFrame.InvokeMethod.
 * Use `create(IPCFrame_InvokeMethodSchema)` to create a new message.
 */
export const IPCFrame_InvokeMethodSchema: GenMessage<IPCFrame_InvokeMethod> = /*@__PURE__*/
  messageDesc(file_protos_perfetto_ipc_wire_protocol, 0, 2);

/**
 * Host -> Client.
 *
 * @generated from message perfetto.protos.IPCFrame.InvokeMethodReply
 */
export type IPCFrame_InvokeMethodReply = Message<"perfetto.protos.IPCFrame.InvokeMethodReply"> & {
  /**
   * @generated from field: optional bool success = 1;
   */
  success: boolean;

  /**
   * only for streaming RPCs.
   *
   * @generated from field: optional bool has_more = 2;
   */
  hasMore: boolean;

  /**
   * proto-encoded response value.
   *
   * @generated from field: optional bytes reply_proto = 3;
   */
  replyProto: Uint8Array;
};

/**
 * Describes the message perfetto.protos.IPCFrame.InvokeMethodReply.
 * Use `create(IPCFrame_InvokeMethodReplySchema)` to create a new message.
 */
export const IPCFrame_InvokeMethodReplySchema: GenMessage<IPCFrame_InvokeMethodReply> = /*@__PURE__*/
  messageDesc(file_protos_perfetto_ipc_wire_protocol, 0, 3);

/**
 * Host -> Client.
 *
 * @generated from message perfetto.protos.IPCFrame.RequestError
 */
export type IPCFrame_RequestError = Message<"perfetto.protos.IPCFrame.RequestError"> & {
  /**
   * @generated from field: optional string error = 1;
   */
  error: string;
};

/**
 * Describes the message perfetto.protos.IPCFrame.RequestError.
 * Use `create(IPCFrame_RequestErrorSchema)` to create a new message.
 */
export const IPCFrame_RequestErrorSchema: GenMessage<IPCFrame_RequestError> = /*@__PURE__*/
  messageDesc(file_protos_perfetto_ipc_wire_protocol, 0, 4);

/**
 * Client (relay service) -> Host. This is generated by the relay service to
 * fill the producer identity in the guest. This message is sent to the host
 * service *before* any IPCFrame is from a local producer is relayed. This is
 * accepted only on AF_VSOCK and AF_INET sockets, where we cannot validate the
 * endpoont of the connection. for AF_UNIX sockets, this is ignored and traced
 * uses instead the SO_PEERCRED.
 *
 * @generated from message perfetto.protos.IPCFrame.SetPeerIdentity
 */
export type IPCFrame_SetPeerIdentity = Message<"perfetto.protos.IPCFrame.SetPeerIdentity"> & {
  /**
   * The UID and PID of the producer process.
   *
   * @generated from field: optional int32 pid = 1;
   */
  pid: number;

  /**
   * @generated from field: optional int32 uid = 2;
   */
  uid: number;

  /**
   * The hint for the tracing service to infer the machine ID. This field
   * should satisfy the requriement that different machines should have
   * different values. In practice, this filed contains the Linux kernel
   * boot_id, or a hash of kernel bootup timestamp and uname(2) if boot_id
   * isn't available.
   *
   * @generated from field: optional string machine_id_hint = 3;
   */
  machineIdHint: string;
};

/**
 * Describes the message perfetto.protos.IPCFrame.SetPeerIdentity.
 * Use `create(IPCFrame_SetPeerIdentitySchema)` to create a new message.
 */
export const IPCFrame_SetPeerIdentitySchema: GenMessage<IPCFrame_SetPeerIdentity> = /*@__PURE__*/
  messageDesc(file_protos_perfetto_ipc_wire_protocol, 0, 5);

