/**********************************************************************
// @@@ 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 @@@
**********************************************************************/
//
// MODULE: CA.IDL 
//
// PURPOSE: Describes methods for ODBC Cluster Administrator
//
// NOTES:   Intentionally not dependent on any other component in ODBC
//          to avoid cyclical references that can not be resolved currently.
//          there are several declarations that are common because of this,
//          and it is imagined that they will eventually be re-partitioned
//          without the need for duplication. 
//
// Modification History

#ifndef _CA_DEFINED
#define _CA_DEFINED 

module CA {
// used to simulate a unique id for interface
// concatates elements
//      major = x01, minor = x00, build = x0001
typedef long long VERSION_def;
typedef string    UUID_def;

#define cm_uuid ((UUID_def) "e0c3d230-e045-11d1-a57d-0060b01ad6ae")
#define cm_version ((VERSION_def) 16777217)

// Object reference
//

typedef char		OMX_IDENTIFIER_def[128];
typedef long		OMX_UID_def;
typedef string<3000> ERROR_TEXT_def;

typedef struct CA_ERROR_DESC_t {
    long			ErrDiagnosticId;
	ERROR_TEXT_def	ErrText;
} CA_ERROR_DESC_def;

typedef sequence<CA_ERROR_DESC_def> CA_ERROR_DESC_LIST_def;

// used to describe the current state of the ODBC system
// as well as to indicate a change directive  
typedef enum OMX_STATUS_t {
    OMX_UNKNOWN
   ,OMX_STOPPED
   ,OMX_STOPPING
   ,OMX_STARTING
   ,OMX_STARTED
} OMX_STATUS_def;


interface Svc 
	{                  
	exception ParamError {string ErrText;};
	exception Error {string ErrText;};
	exception DuplicateRegistry{};
 
    // used by Association Service to register for FailOver protection
	void RegSvc (  in OMX_IDENTIFIER_def ObjRef
			      ,in OMX_IDENTIFIER_def ObjMachineNm
				  ,in string<128>		 ProcessNm
				  ,in string<128>		 ProcessTitle
				  ,in long				 DSId
				  ,in long				 NodeNum
				  ,in long				 DebugFlag
				  )
	    raises (ParamError
		       ,Error
		       ,DuplicateRegistry);

	// used to indicate that the Association Server is broadcasting
	// a Stop request, signalling CA to gracefully shutdown 
	void ShutdownSvc()
	    raises (Error);

	// used to indicate that the services has failed
	// signalling CA to shutdown immediately 
	void AbortSvc()
	    raises (Error);

        // used as a signal between AS and CA servers.  will eventually 
	// have parameters and timestamps but for now...
	void KeepAlive ()
	    raises (Error);
	
	};  // end of interface CA_Svc

}; // end of module CA			       
#endif
