/**********************************************************************
// @@@ START COPYRIGHT @@@
//
// 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.
//
// @@@ END COPYRIGHT @@@
**********************************************************************/
//
// Interface to $RECEIVE handler object. These objects are registered
// by calling CEE_NSK_RECEIVE_REGISTER. Whenever the CEE receives a
// request on $RECEIVE which it does not require, it calls the
// appropriate method for the first registered object. This object
// can either respond to the request or raise the "decline" exception.
// In this case the CEE hands the request to the next registered
// object and so on.
//

#ifndef CEERCV_IDL
#define CEERCV_IDL

interface CEERCV
   {

//
// !Decline
//
// Exception to indicate that request should be passed
// on to next object.
//
   exception decline {};

//
// !ReceiveInfoDef
//
// Information returned by FILE_GETRECEIVEINFO_
//
   typedef short ReceiveInfoDef[17];

//
// !SystemMessage
//
// Operation to parse system messages. Note that
// informational messages such as CPU down should
// always be 'declined' so that other objects also
// get to see them.
//
   void SystemMessage
      (
      in  ReceiveInfoDef       receiveInfo,
      in  sequence<short>      request,
      out short                error,
      out sequence<short>      reply
      )
      raises (decline);


//
// !IOMessage
//
// IO message handler. WRITE, READ, or WRITEREAD.
// receiveInfo[0] indicates which.
//
   void IOMessage
      (
      in  ReceiveInfoDef       receiveInfo,
      in  short                dialogInfo,
      in  sequence<octet>      request,
      out short                error,
      out sequence<octet>      reply
      )
      raises (decline);
   };

#endif
