/**********************************************************************
// @@@ 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 @@@
**********************************************************************/
#ifndef CEECFG_H_
#define CEECFG_H_
/*
 * Translation unit: CEECFG
 * Generated by CNPGEN(TANTAU CNPGEN TANTAU_AG_PC8 20001120.103031) on Mon Jan 31 11:14:09 2011
 * C++ constructs used
 * Header file for use with the CEE
 * Client functionality included
 * Server functionality included
 */
#include <stdarg.h>
#include <cee.h>
#if CEE_H_VERSION != 19991123
#error Version mismatch CEE_H_VERSION != 19991123
#endif
#include <idltype.h>
#if IDL_TYPE_H_VERSION != 19971225
#error Version mismatch IDL_TYPE_H_VERSION != 19971225
#endif

/*******************
 * Module 'CEECFG' *
 *******************/
typedef IDL_boolean CEECFG_MemoryDebug;
#define CEECFG_MemoryDebug_cin_ ((char *) "B")
#define CEECFG_MemoryDebug_csz_ ((IDL_unsigned_long) 1)
typedef IDL_unsigned_long CEECFG_MaxConfiguredObjects;
#define CEECFG_MaxConfiguredObjects_cin_ ((char *) "K")
#define CEECFG_MaxConfiguredObjects_csz_ ((IDL_unsigned_long) 1)
typedef IDL_unsigned_long CEECFG_MaxInterfaces;
#define CEECFG_MaxInterfaces_cin_ ((char *) "K")
#define CEECFG_MaxInterfaces_csz_ ((IDL_unsigned_long) 1)
typedef IDL_unsigned_long CEECFG_MaxImplementations;
#define CEECFG_MaxImplementations_cin_ ((char *) "K")
#define CEECFG_MaxImplementations_csz_ ((IDL_unsigned_long) 1)
typedef IDL_unsigned_long CEECFG_MaxAsynchIOs;
#define CEECFG_MaxAsynchIOs_cin_ ((char *) "K")
#define CEECFG_MaxAsynchIOs_csz_ ((IDL_unsigned_long) 1)
typedef IDL_unsigned_long CEECFG_MaxObjrefSize;
#define CEECFG_MaxObjrefSize_cin_ ((char *) "K")
#define CEECFG_MaxObjrefSize_csz_ ((IDL_unsigned_long) 1)
typedef IDL_unsigned_long CEECFG_MaxProxies;
#define CEECFG_MaxProxies_cin_ ((char *) "K")
#define CEECFG_MaxProxies_csz_ ((IDL_unsigned_long) 1)
typedef IDL_unsigned_long CEECFG_MaxObjects;
#define CEECFG_MaxObjects_cin_ ((char *) "K")
#define CEECFG_MaxObjects_csz_ ((IDL_unsigned_long) 1)
typedef IDL_unsigned_long CEECFG_MaxSignalHandlers;
#define CEECFG_MaxSignalHandlers_cin_ ((char *) "K")
#define CEECFG_MaxSignalHandlers_csz_ ((IDL_unsigned_long) 1)
typedef IDL_unsigned_long CEECFG_MaxCalls;
#define CEECFG_MaxCalls_cin_ ((char *) "K")
#define CEECFG_MaxCalls_csz_ ((IDL_unsigned_long) 1)
typedef IDL_unsigned_long CEECFG_MaxServiceContextListLength;
#define CEECFG_MaxServiceContextListLength_cin_ ((char *) "K")
#define CEECFG_MaxServiceContextListLength_csz_ ((IDL_unsigned_long) 1)
typedef IDL_unsigned_long CEECFG_MaxTimers;
#define CEECFG_MaxTimers_cin_ ((char *) "K")
#define CEECFG_MaxTimers_csz_ ((IDL_unsigned_long) 1)
typedef IDL_unsigned_long CEECFG_MaxTasks;
#define CEECFG_MaxTasks_cin_ ((char *) "K")
#define CEECFG_MaxTasks_csz_ ((IDL_unsigned_long) 1)
typedef IDL_unsigned_long CEECFG_MaxTiSignalTags;
#define CEECFG_MaxTiSignalTags_cin_ ((char *) "K")
#define CEECFG_MaxTiSignalTags_csz_ ((IDL_unsigned_long) 1)
typedef IDL_unsigned_long CEECFG_PoolExtentSizeDivisor;
#define CEECFG_PoolExtentSizeDivisor_cin_ ((char *) "K")
#define CEECFG_PoolExtentSizeDivisor_csz_ ((IDL_unsigned_long) 1)
typedef IDL_unsigned_long CEECFG_Transport;
#define CEECFG_Transport_cin_ ((char *) "K")
#define CEECFG_Transport_csz_ ((IDL_unsigned_long) 1)
typedef IDL_unsigned_short CEECFG_TcpPortNumber;
#define CEECFG_TcpPortNumber_cin_ ((char *) "J")
#define CEECFG_TcpPortNumber_csz_ ((IDL_unsigned_long) 1)
typedef IDL_boolean CEECFG_TcpReuseAddress;
#define CEECFG_TcpReuseAddress_cin_ ((char *) "B")
#define CEECFG_TcpReuseAddress_csz_ ((IDL_unsigned_long) 1)
typedef IDL_string CEECFG_TcpProcessName;
#define CEECFG_TcpProcessName_cin_ ((char *) "d0+")
#define CEECFG_TcpProcessName_csz_ ((IDL_unsigned_long) 3)
typedef IDL_string CEECFG_TcpNetwork;
#define CEECFG_TcpNetwork_cin_ ((char *) "d0+")
#define CEECFG_TcpNetwork_csz_ ((IDL_unsigned_long) 3)
typedef IDL_char CEECFG_ServerclassName[16];
#define CEECFG_ServerclassName_cin_ ((char *) "d15+")
#define CEECFG_ServerclassName_csz_ ((IDL_unsigned_long) 4)
typedef IDL_char CEECFG_PathmonName[16];
#define CEECFG_PathmonName_cin_ ((char *) "d15+")
#define CEECFG_PathmonName_csz_ ((IDL_unsigned_long) 4)
typedef IDL_string CEECFG_TitaniumServerCapsule;
#define CEECFG_TitaniumServerCapsule_cin_ ((char *) "d0+")
#define CEECFG_TitaniumServerCapsule_csz_ ((IDL_unsigned_long) 3)
typedef IDL_unsigned_long CEECFG_TitaniumServerConcurrency;
#define CEECFG_TitaniumServerConcurrency_cin_ ((char *) "K")
#define CEECFG_TitaniumServerConcurrency_csz_ ((IDL_unsigned_long) 1)
const IDL_unsigned_long CEECFG_MAX_LIBRARY_NAME_SIZE = 256;
const IDL_unsigned_long CEECFG_MAX_ENTRY_POINT_NAME_SIZE = 64;
const IDL_unsigned_long CEECFG_MAX_PARAM_SIZE = 1024;
const IDL_unsigned_long CEECFG_MIN_OBJREF_SIZE = 64;
struct CEECFG_ObjectConfigTag {
  struct oid_seq_ {
    IDL_unsigned_long _length;
    char pad_to_offset_8_[4];
    IDL_char *_buffer;
    IDL_PTR_PAD(_buffer, 1)
  } oid;
  struct libraryName_seq_ {
    IDL_unsigned_long _length;
    IDL_char _buffer[256];
  } libraryName;
  struct entrypointName_seq_ {
    IDL_unsigned_long _length;
    IDL_char _buffer[64];
  } entrypointName;
  struct param_seq_ {
    IDL_unsigned_long _length;
    IDL_char _buffer[1024];
  } param;
  char pad_to_size_1376_[4];
};
typedef struct CEECFG_ConfiguredObjectTable_seq_ {
  IDL_unsigned_long _length;
  char pad_to_offset_8_[4];
  CEECFG_ObjectConfigTag *_buffer;
  IDL_PTR_PAD(_buffer, 1)
} CEECFG_ConfiguredObjectTable;
#define CEECFG_ConfiguredObjectTable_cin_ ((char *) "c0+b4+c0+Cc256+Cc64+Cc1024+C")
#define CEECFG_ConfiguredObjectTable_csz_ ((IDL_unsigned_long) 28)
typedef IDL_boolean CEECFG_UseBootstrapAlertObject;
#define CEECFG_UseBootstrapAlertObject_cin_ ((char *) "B")
#define CEECFG_UseBootstrapAlertObject_csz_ ((IDL_unsigned_long) 1)
typedef IDL_Object CEECFG_AlertObjref;
#define CEECFG_AlertObjref_cin_ ((char *) "P0+")
#define CEECFG_AlertObjref_csz_ ((IDL_unsigned_long) 3)
typedef IDL_boolean CEECFG_UseTitanium;
#define CEECFG_UseTitanium_cin_ ((char *) "B")
#define CEECFG_UseTitanium_csz_ ((IDL_unsigned_long) 1)
typedef IDL_boolean CEECFG_ProxyCachingEnabled;
#define CEECFG_ProxyCachingEnabled_cin_ ((char *) "B")
#define CEECFG_ProxyCachingEnabled_csz_ ((IDL_unsigned_long) 1)
typedef IDL_boolean CEECFG_MaxProxiesToCache;
#define CEECFG_MaxProxiesToCache_cin_ ((char *) "B")
#define CEECFG_MaxProxiesToCache_csz_ ((IDL_unsigned_long) 1)
typedef IDL_string CEECFG_TraceInfo;
#define CEECFG_TraceInfo_cin_ ((char *) "d0+")
#define CEECFG_TraceInfo_csz_ ((IDL_unsigned_long) 3)
typedef IDL_string CEECFG_TraceWarn;
#define CEECFG_TraceWarn_cin_ ((char *) "d0+")
#define CEECFG_TraceWarn_csz_ ((IDL_unsigned_long) 3)
typedef IDL_string CEECFG_TraceFail;
#define CEECFG_TraceFail_cin_ ((char *) "d0+")
#define CEECFG_TraceFail_csz_ ((IDL_unsigned_long) 3)
typedef IDL_string CEECFG_TraceFormat;
#define CEECFG_TraceFormat_cin_ ((char *) "d0+")
#define CEECFG_TraceFormat_csz_ ((IDL_unsigned_long) 3)
typedef IDL_boolean CEECFG_TraceClient;
#define CEECFG_TraceClient_cin_ ((char *) "B")
#define CEECFG_TraceClient_csz_ ((IDL_unsigned_long) 1)
typedef IDL_boolean CEECFG_TraceServer;
#define CEECFG_TraceServer_cin_ ((char *) "B")
#define CEECFG_TraceServer_csz_ ((IDL_unsigned_long) 1)
typedef IDL_unsigned_long CEECFG_ParamDumpLength;
#define CEECFG_ParamDumpLength_cin_ ((char *) "K")
#define CEECFG_ParamDumpLength_csz_ ((IDL_unsigned_long) 1)
typedef IDL_boolean CEECFG_InsertLineBreaks;
#define CEECFG_InsertLineBreaks_cin_ ((char *) "B")
#define CEECFG_InsertLineBreaks_csz_ ((IDL_unsigned_long) 1)
typedef IDL_string CEECFG_StderrFile;
#define CEECFG_StderrFile_cin_ ((char *) "d0+")
#define CEECFG_StderrFile_csz_ ((IDL_unsigned_long) 3)
struct CEECFG_ServiceResourceEntry {
  struct type_seq_ {
    IDL_unsigned_long _length;
    char pad_to_offset_8_[4];
    IDL_char *_buffer;
    IDL_PTR_PAD(_buffer, 1)
  } type;
  struct objref_seq_ {
    IDL_unsigned_long _length;
    char pad_to_offset_8_[4];
    IDL_char *_buffer;
    IDL_PTR_PAD(_buffer, 1)
  } objref;
};
struct CEECFG_ServiceResourceBlock {
  struct name_seq_ {
    IDL_unsigned_long _length;
    char pad_to_offset_8_[4];
    IDL_char *_buffer;
    IDL_PTR_PAD(_buffer, 1)
  } name;
  struct policy_seq_ {
    IDL_unsigned_long _length;
    char pad_to_offset_8_[4];
    IDL_char *_buffer;
    IDL_PTR_PAD(_buffer, 1)
  } policy;
  struct list_seq_ {
    IDL_unsigned_long _length;
    char pad_to_offset_8_[4];
    CEECFG_ServiceResourceEntry *_buffer;
    IDL_PTR_PAD(_buffer, 1)
  } list;
};
typedef struct CEECFG_ServiceResourceTable_seq_ {
  IDL_unsigned_long _length;
  char pad_to_offset_8_[4];
  CEECFG_ServiceResourceBlock *_buffer;
  IDL_PTR_PAD(_buffer, 1)
} CEECFG_ServiceResourceTable;
#define CEECFG_ServiceResourceTable_cin_ ((char *) "c0+b3+c0+Cc0+Cc0+b2+c0+Cc0+C")
#define CEECFG_ServiceResourceTable_csz_ ((IDL_unsigned_long) 28)
typedef IDL_unsigned_long CEECFG_AsynchCallMode;
#define CEECFG_AsynchCallMode_cin_ ((char *) "K")
#define CEECFG_AsynchCallMode_csz_ ((IDL_unsigned_long) 1)
typedef IDL_unsigned_long CEECFG_AsynchResponseMode;
#define CEECFG_AsynchResponseMode_cin_ ((char *) "K")
#define CEECFG_AsynchResponseMode_csz_ ((IDL_unsigned_long) 1)
typedef IDL_Object CEECFG_TransactionFactory;
#define CEECFG_TransactionFactory_cin_ ((char *) "P0+")
#define CEECFG_TransactionFactory_csz_ ((IDL_unsigned_long) 3)
/* End module: CEECFG */
/*
 * End translation unit: CEECFG
 */
#endif /* CEECFG_H_ */
