/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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.
 */

/**
 * These are the messages used by Hadoop RPC to marshal the
 * request and response in the RPC layer.
 */
option java_package = "org.apache.hadoop.ipc.protobuf";
option java_outer_classname = "HadoopRpcProtos";
option java_generate_equals_and_hash = true;
package hadoop.common;

/**
 * This message is used for Protobuf Rpc Engine.
 * The message is used to marshal a Rpc-request
 * from RPC client to the RPC server.
 * The Response to the Rpc call (including errors) are handled
 * as part of the standard Rpc response. 
 */
message HadoopRpcRequestProto {
  /** Name of the RPC method */
  required string methodName = 1;

  /** Bytes corresponding to the client protobuf request */
  optional bytes request = 2;
  
  /** protocol name of class declaring the called method */ 
  required string declaringClassProtocolName = 3;
  
  /** protocol version of class declaring the called method */
  required uint64 clientProtocolVersion = 4;
}
