// **********************************************************************
//
// Copyright (c) 2002
// IONA Technologies, Inc.
// Waltham, MA, USA
//
// All Rights Reserved
//
// **********************************************************************

#ifndef OCI_TYPES_IDL
#define OCI_TYPES_IDL

#include <OB/IOP.idl>
#include <OB/OCIBuffer.idl>
#include <OB/Types.idl>

#pragma prefix "ooc.com"

module OCI
{
/** Alias for an IOR. */
typedef IOP::IOR IOR;

/** Alias for a profile id. */
typedef IOP::ProfileId ProfileId;

/** Alias for a sequence of profile ids. */
typedef sequence< ProfileId > ProfileIdSeq;

/** Alias for a plugin id. */
typedef string PluginId;

/** Alias for a sequence of plugin ids. */
typedef sequence< PluginId > PluginIdSeq;

/** Alias for an object key, which is a sequence of octets. */
typedef CORBA::OctetSeq ObjectKey;

/** Alias for a sequence of tagged components. */
typedef IOP::TaggedComponentSeq TaggedComponentSeq;

/** Alias for a system-specific handle type. */
typedef long Handle;

/** Indicates the send/receive capabilities of an OCI component. */
enum SendReceiveMode { SendOnly, ReceiveOnly, SendReceive };

/**
 *
 * Basic information about an IOR profile. Profiles for specific
 * protocols contain additional data. (For example, an IIOP profile
 * also contains a hostname and a port number.)
 *
 * @member key The object key.
 *
 * @member major The major version number of the ORB's protocol. (For
 * example, the major GIOP version, if the underlying ORB uses GIOP.)
 *
 * @member minor The minor version number of the ORB's protocol. (For
 * example, the minor GIOP version, if the underlying ORB uses GIOP.)
 *
 * @member id The id of the profile that contains this information.
 *
 * @member index The position index of this profile in an IOR.
 *
 * @member components A sequence of tagged components.
 *
 **/
 
struct ProfileInfo
{
    ObjectKey key;
    octet major;
    octet minor;
    ProfileId id;
    unsigned long index;
    TaggedComponentSeq components;
};

/** Alias for a sequence of basic information about profiles. */
typedef sequence<ProfileInfo> ProfileInfoSeq;

/** Alias for a sequence of parameters. */
typedef sequence<string> ParamSeq;

}; // End module OCI

#endif
