// @@@ 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 Fri Jun 18 12:53:26 2004
 * 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_ */
