/**********************************************************************
// @@@ 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: omxSec.IDL 
//
// PURPOSE: Describes methods for client call to authentication service
//          provided by cluster or PDC.  independent from the ODBC Services
//          
//
//// Modification History

#ifndef _OMXSEC_DEFINED
#define _OMXSEC_DEFINED 


// 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;
module OMX {

#define OMXSec_uuid ((UUID_def) "d1894a72-0326-11d1-a54a-0060b01ad6ae")
#define OMXSec_version ((VERSION_def) 16777217)
#define MAX_AUTH_LEN		2048 
typedef sequence<octet,MAX_AUTH_LEN>	AuthData_def;

//it will appear that this is a cludgy design, treating the
// byte transfer as only an octet string, but its passed encrypted
// destroying any structure, and the bytes must be untouched from
// requester to server

interface Sec {
	exception ParamError {};
	exception AuthDenied {};
	exception AuthError {};
	exception SecSvcBusy{};
	exception SecSvcUnavailable{};
	
    void GetAuthId(
			in  AuthData_def			pzInAuthData,
			out AuthData_def            pzRtnAuthData)
			raises ( ParamError
			       , AuthError
				   , AuthDenied
			       , SecSvcBusy
			       , SecSvcUnavailable ); 

    }; // end of Sec interface

}; // end of OMX module


#endif
