// **********************************************************************
//
// Generated by the ORBacus IDL-to-C++ Translator
//
// Copyright (c) 2003
// IONA Technologies, Inc.
// Waltham, MA, USA
//
// All Rights Reserved
//
// **********************************************************************

// Version: 4.1.3

#ifndef __OB_GIOP_h__
#define __OB_GIOP_h__

#ifndef OB_IMPORT
#   ifdef OB_DLL
#      define OB_IMPORT __declspec(dllimport)
#   else
#      define OB_IMPORT /**/
#   endif
#endif


#include <OB/IOP.h>

#ifndef OB_INTEGER_VERSION
#   error No ORBacus version defined! Is <OB/CORBA.h> included?
#endif

#ifndef OB_NO_VERSION_CHECK
#   if (OB_INTEGER_VERSION != 4010300L)
#       error ORBacus version mismatch!
#   endif
#endif

namespace GIOP
{

} // End of namespace GIOP

namespace GIOP
{

} // End of namespace GIOP

namespace OBStubImpl_GIOP
{

} // End of namespace OBStubImpl_GIOP

namespace OBStubImpl_GIOP
{

} // End of namespace OBStubImpl_GIOP

//
// IDL:omg.org/GIOP:1.0
//
namespace GIOP
{

//
// IDL:omg.org/GIOP/Version:1.0
//
struct Version;
typedef OB::FixVar< Version > Version_var;
typedef Version& Version_out;

struct Version
{
    typedef Version_var _var_type;

    ::CORBA::Octet major;
    ::CORBA::Octet minor;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(Version&, OB::InputStreamImpl*);
};

//
// IDL:omg.org/GIOP/MsgType_1_1:1.0
//
enum MsgType_1_1
{
    Request,
    Reply,
    CancelRequest,
    LocateRequest,
    LocateReply,
    CloseConnection,
    MessageError,
    Fragment
};

typedef MsgType_1_1& MsgType_1_1_out;

//
// IDL:omg.org/GIOP/MessageHeader_1_0:1.0
//
struct MessageHeader_1_0;
typedef OB::FixVar< MessageHeader_1_0 > MessageHeader_1_0_var;
typedef MessageHeader_1_0& MessageHeader_1_0_out;

struct MessageHeader_1_0
{
    typedef MessageHeader_1_0_var _var_type;

    ::CORBA::Char magic[4];
    Version GIOP_version;
    ::CORBA::Boolean byte_order;
    ::CORBA::Octet message_type;
    ::CORBA::ULong message_size;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(MessageHeader_1_0&, OB::InputStreamImpl*);
};

//
// IDL:omg.org/GIOP/MessageHeader_1_1:1.0
//
struct MessageHeader_1_1;
typedef OB::FixVar< MessageHeader_1_1 > MessageHeader_1_1_var;
typedef MessageHeader_1_1& MessageHeader_1_1_out;

struct MessageHeader_1_1
{
    typedef MessageHeader_1_1_var _var_type;

    ::CORBA::Char magic[4];
    Version GIOP_version;
    ::CORBA::Octet flags;
    ::CORBA::Octet message_type;
    ::CORBA::ULong message_size;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(MessageHeader_1_1&, OB::InputStreamImpl*);
};

//
// IDL:omg.org/GIOP/MessageHeader_1_2:1.0
//
typedef MessageHeader_1_1 MessageHeader_1_2;
typedef MessageHeader_1_1_var MessageHeader_1_2_var;
typedef MessageHeader_1_1_out MessageHeader_1_2_out;

//
// IDL:omg.org/GIOP/RequestHeader_1_0:1.0
//
struct RequestHeader_1_0;
typedef OB::VarVar< RequestHeader_1_0 > RequestHeader_1_0_var;
typedef OB::VarOut< RequestHeader_1_0 > RequestHeader_1_0_out;

struct RequestHeader_1_0
{
#ifdef OB_CLEAR_MEM
    RequestHeader_1_0();
#else
    RequestHeader_1_0() { }
#endif
    RequestHeader_1_0(const RequestHeader_1_0&);
    RequestHeader_1_0& operator=(const RequestHeader_1_0&);

    typedef RequestHeader_1_0_var _var_type;

    ::IOP::ServiceContextList service_context;
    ::CORBA::ULong request_id;
    ::CORBA::Boolean response_expected;
    class OBUnique_object_key { };
    typedef OB::FixSeq< ::CORBA::Octet, OBUnique_object_key > _object_key_seq;
    _object_key_seq object_key;
    OB::StrForStruct operation;
    ::CORBA::Principal_var requesting_principal;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(RequestHeader_1_0&, OB::InputStreamImpl*);
};

//
// IDL:omg.org/GIOP/RequestHeader_1_1:1.0
//
struct RequestHeader_1_1;
typedef OB::VarVar< RequestHeader_1_1 > RequestHeader_1_1_var;
typedef OB::VarOut< RequestHeader_1_1 > RequestHeader_1_1_out;

struct RequestHeader_1_1
{
#ifdef OB_CLEAR_MEM
    RequestHeader_1_1();
#else
    RequestHeader_1_1() { }
#endif
    RequestHeader_1_1(const RequestHeader_1_1&);
    RequestHeader_1_1& operator=(const RequestHeader_1_1&);

    typedef RequestHeader_1_1_var _var_type;

    ::IOP::ServiceContextList service_context;
    ::CORBA::ULong request_id;
    ::CORBA::Boolean response_expected;
    ::CORBA::Octet reserved[3];
    class OBUnique_object_key { };
    typedef OB::FixSeq< ::CORBA::Octet, OBUnique_object_key > _object_key_seq;
    _object_key_seq object_key;
    OB::StrForStruct operation;
    ::CORBA::Principal_var requesting_principal;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(RequestHeader_1_1&, OB::InputStreamImpl*);
};

//
// IDL:omg.org/GIOP/AddressingDisposition:1.0
//
typedef ::CORBA::Short AddressingDisposition;
typedef ::CORBA::Short_out AddressingDisposition_out;

//
// IDL:omg.org/GIOP/KeyAddr:1.0
//
const ::CORBA::Short KeyAddr = 0;

//
// IDL:omg.org/GIOP/ProfileAddr:1.0
//
const ::CORBA::Short ProfileAddr = 1;

//
// IDL:omg.org/GIOP/ReferenceAddr:1.0
//
const ::CORBA::Short ReferenceAddr = 2;

//
// IDL:omg.org/GIOP/IORAddressingInfo:1.0
//
struct IORAddressingInfo;
typedef OB::VarVar< IORAddressingInfo > IORAddressingInfo_var;
typedef OB::VarOut< IORAddressingInfo > IORAddressingInfo_out;

struct IORAddressingInfo
{
#ifdef OB_CLEAR_MEM
    IORAddressingInfo();
#else
    IORAddressingInfo() { }
#endif
    IORAddressingInfo(const IORAddressingInfo&);
    IORAddressingInfo& operator=(const IORAddressingInfo&);

    typedef IORAddressingInfo_var _var_type;

    ::CORBA::ULong selected_profile_index;
    ::IOP::IOR ior;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(IORAddressingInfo&, OB::InputStreamImpl*);
};

//
// IDL:omg.org/GIOP/TargetAddress:1.0
//
struct TargetAddress;
typedef OB::VarVar< TargetAddress > TargetAddress_var;
typedef OB::VarOut< TargetAddress > TargetAddress_out;

struct TargetAddress
{
    class OBUnique_object_key { };
    typedef OB::FixSeq< ::CORBA::Octet, OBUnique_object_key > _object_key_seq;

private:

    union
    {
        _object_key_seq* object_key;
        ::IOP::TaggedProfile* profile;
        IORAddressingInfo* ior;
    } _ob_v_;

    bool _ob_i_;
    AddressingDisposition _ob_d_;

    void _OB_remove();
    bool _OB_check(AddressingDisposition) const;

public:

    typedef TargetAddress_var _var_type;

#ifdef OB_CLEAR_MEM
    TargetAddress();
#else
    TargetAddress() : _ob_i_(false) { }
#endif
    TargetAddress(const TargetAddress&);
    ~TargetAddress() { _OB_remove(); }

    TargetAddress& operator=(const TargetAddress&);

    void _d(AddressingDisposition);
    AddressingDisposition _d() const;

    void object_key(const _object_key_seq&);
    const _object_key_seq& object_key() const;
    _object_key_seq& object_key();

    void profile(const ::IOP::TaggedProfile&);
    const ::IOP::TaggedProfile& profile() const;
    ::IOP::TaggedProfile& profile();

    void ior(const IORAddressingInfo&);
    const IORAddressingInfo& ior() const;
    IORAddressingInfo& ior();

    void _default();

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(TargetAddress&, OB::InputStreamImpl*);
};

//
// IDL:omg.org/GIOP/RequestHeader_1_2:1.0
//
struct RequestHeader_1_2;
typedef OB::VarVar< RequestHeader_1_2 > RequestHeader_1_2_var;
typedef OB::VarOut< RequestHeader_1_2 > RequestHeader_1_2_out;

struct RequestHeader_1_2
{
#ifdef OB_CLEAR_MEM
    RequestHeader_1_2();
#else
    RequestHeader_1_2() { }
#endif
    RequestHeader_1_2(const RequestHeader_1_2&);
    RequestHeader_1_2& operator=(const RequestHeader_1_2&);

    typedef RequestHeader_1_2_var _var_type;

    ::CORBA::ULong request_id;
    ::CORBA::Octet response_flags;
    ::CORBA::Octet reserved[3];
    TargetAddress target;
    OB::StrForStruct operation;
    ::IOP::ServiceContextList service_context;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(RequestHeader_1_2&, OB::InputStreamImpl*);
};

//
// IDL:omg.org/GIOP/ReplyStatusType_1_2:1.0
//
enum ReplyStatusType_1_2
{
    NO_EXCEPTION,
    USER_EXCEPTION,
    SYSTEM_EXCEPTION,
    LOCATION_FORWARD,
    LOCATION_FORWARD_PERM,
    NEEDS_ADDRESSING_MODE
};

typedef ReplyStatusType_1_2& ReplyStatusType_1_2_out;

//
// IDL:omg.org/GIOP/ReplyHeader_1_0:1.0
//
struct ReplyHeader_1_0;
typedef OB::VarVar< ReplyHeader_1_0 > ReplyHeader_1_0_var;
typedef OB::VarOut< ReplyHeader_1_0 > ReplyHeader_1_0_out;

struct ReplyHeader_1_0
{
#ifdef OB_CLEAR_MEM
    ReplyHeader_1_0();
#else
    ReplyHeader_1_0() { }
#endif
    ReplyHeader_1_0(const ReplyHeader_1_0&);
    ReplyHeader_1_0& operator=(const ReplyHeader_1_0&);

    typedef ReplyHeader_1_0_var _var_type;

    ::IOP::ServiceContextList service_context;
    ::CORBA::ULong request_id;
    ReplyStatusType_1_2 reply_status;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(ReplyHeader_1_0&, OB::InputStreamImpl*);
};

//
// IDL:omg.org/GIOP/ReplyHeader_1_1:1.0
//
typedef ReplyHeader_1_0 ReplyHeader_1_1;
typedef ReplyHeader_1_0_var ReplyHeader_1_1_var;
typedef ReplyHeader_1_0_out ReplyHeader_1_1_out;

//
// IDL:omg.org/GIOP/ReplyHeader_1_2:1.0
//
struct ReplyHeader_1_2;
typedef OB::VarVar< ReplyHeader_1_2 > ReplyHeader_1_2_var;
typedef OB::VarOut< ReplyHeader_1_2 > ReplyHeader_1_2_out;

struct ReplyHeader_1_2
{
#ifdef OB_CLEAR_MEM
    ReplyHeader_1_2();
#else
    ReplyHeader_1_2() { }
#endif
    ReplyHeader_1_2(const ReplyHeader_1_2&);
    ReplyHeader_1_2& operator=(const ReplyHeader_1_2&);

    typedef ReplyHeader_1_2_var _var_type;

    ::CORBA::ULong request_id;
    ReplyStatusType_1_2 reply_status;
    ::IOP::ServiceContextList service_context;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(ReplyHeader_1_2&, OB::InputStreamImpl*);
};

//
// IDL:omg.org/GIOP/SystemExceptionReplyBody:1.0
//
struct SystemExceptionReplyBody;
typedef OB::VarVar< SystemExceptionReplyBody > SystemExceptionReplyBody_var;
typedef OB::VarOut< SystemExceptionReplyBody > SystemExceptionReplyBody_out;

struct SystemExceptionReplyBody
{
#ifdef OB_CLEAR_MEM
    SystemExceptionReplyBody();
#else
    SystemExceptionReplyBody() { }
#endif
    SystemExceptionReplyBody(const SystemExceptionReplyBody&);
    SystemExceptionReplyBody& operator=(const SystemExceptionReplyBody&);

    typedef SystemExceptionReplyBody_var _var_type;

    OB::StrForStruct exception_id;
    ::CORBA::ULong minor_code_value;
    ::CORBA::ULong completion_status;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(SystemExceptionReplyBody&, OB::InputStreamImpl*);
};

//
// IDL:omg.org/GIOP/CancelRequestHeader:1.0
//
struct CancelRequestHeader;
typedef OB::FixVar< CancelRequestHeader > CancelRequestHeader_var;
typedef CancelRequestHeader& CancelRequestHeader_out;

struct CancelRequestHeader
{
    typedef CancelRequestHeader_var _var_type;

    ::CORBA::ULong request_id;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(CancelRequestHeader&, OB::InputStreamImpl*);
};

//
// IDL:omg.org/GIOP/LocateRequestHeader_1_0:1.0
//
struct LocateRequestHeader_1_0;
typedef OB::VarVar< LocateRequestHeader_1_0 > LocateRequestHeader_1_0_var;
typedef OB::VarOut< LocateRequestHeader_1_0 > LocateRequestHeader_1_0_out;

struct LocateRequestHeader_1_0
{
#ifdef OB_CLEAR_MEM
    LocateRequestHeader_1_0();
#else
    LocateRequestHeader_1_0() { }
#endif
    LocateRequestHeader_1_0(const LocateRequestHeader_1_0&);
    LocateRequestHeader_1_0& operator=(const LocateRequestHeader_1_0&);

    typedef LocateRequestHeader_1_0_var _var_type;

    ::CORBA::ULong request_id;
    class OBUnique_object_key { };
    typedef OB::FixSeq< ::CORBA::Octet, OBUnique_object_key > _object_key_seq;
    _object_key_seq object_key;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(LocateRequestHeader_1_0&, OB::InputStreamImpl*);
};

//
// IDL:omg.org/GIOP/LocateRequestHeader_1_1:1.0
//
typedef LocateRequestHeader_1_0 LocateRequestHeader_1_1;
typedef LocateRequestHeader_1_0_var LocateRequestHeader_1_1_var;
typedef LocateRequestHeader_1_0_out LocateRequestHeader_1_1_out;

//
// IDL:omg.org/GIOP/LocateRequestHeader_1_2:1.0
//
struct LocateRequestHeader_1_2;
typedef OB::VarVar< LocateRequestHeader_1_2 > LocateRequestHeader_1_2_var;
typedef OB::VarOut< LocateRequestHeader_1_2 > LocateRequestHeader_1_2_out;

struct LocateRequestHeader_1_2
{
#ifdef OB_CLEAR_MEM
    LocateRequestHeader_1_2();
#else
    LocateRequestHeader_1_2() { }
#endif
    LocateRequestHeader_1_2(const LocateRequestHeader_1_2&);
    LocateRequestHeader_1_2& operator=(const LocateRequestHeader_1_2&);

    typedef LocateRequestHeader_1_2_var _var_type;

    ::CORBA::ULong request_id;
    TargetAddress target;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(LocateRequestHeader_1_2&, OB::InputStreamImpl*);
};

//
// IDL:omg.org/GIOP/LocateStatusType_1_2:1.0
//
enum LocateStatusType_1_2
{
    UNKNOWN_OBJECT,
    OBJECT_HERE,
    OBJECT_FORWARD,
    OBJECT_FORWARD_PERM,
    LOC_SYSTEM_EXCEPTION,
    LOC_NEEDS_ADDRESSING_MODE
};

typedef LocateStatusType_1_2& LocateStatusType_1_2_out;

//
// IDL:omg.org/GIOP/LocateReplyHeader_1_0:1.0
//
struct LocateReplyHeader_1_0;
typedef OB::FixVar< LocateReplyHeader_1_0 > LocateReplyHeader_1_0_var;
typedef LocateReplyHeader_1_0& LocateReplyHeader_1_0_out;

struct LocateReplyHeader_1_0
{
    typedef LocateReplyHeader_1_0_var _var_type;

    ::CORBA::ULong request_id;
    LocateStatusType_1_2 locate_status;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(LocateReplyHeader_1_0&, OB::InputStreamImpl*);
};

//
// IDL:omg.org/GIOP/LocateReplyHeader_1_1:1.0
//
typedef LocateReplyHeader_1_0 LocateReplyHeader_1_1;
typedef LocateReplyHeader_1_0_var LocateReplyHeader_1_1_var;
typedef LocateReplyHeader_1_0_out LocateReplyHeader_1_1_out;

//
// IDL:omg.org/GIOP/LocateReplyHeader_1_2:1.0
//
struct LocateReplyHeader_1_2;
typedef OB::FixVar< LocateReplyHeader_1_2 > LocateReplyHeader_1_2_var;
typedef LocateReplyHeader_1_2& LocateReplyHeader_1_2_out;

struct LocateReplyHeader_1_2
{
    typedef LocateReplyHeader_1_2_var _var_type;

    ::CORBA::ULong request_id;
    LocateStatusType_1_2 locate_status;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(LocateReplyHeader_1_2&, OB::InputStreamImpl*);
};

//
// IDL:omg.org/GIOP/FragmentHeader_1_2:1.0
//
struct FragmentHeader_1_2;
typedef OB::FixVar< FragmentHeader_1_2 > FragmentHeader_1_2_var;
typedef FragmentHeader_1_2& FragmentHeader_1_2_out;

struct FragmentHeader_1_2
{
    typedef FragmentHeader_1_2_var _var_type;

    ::CORBA::ULong request_id;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(FragmentHeader_1_2&, OB::InputStreamImpl*);
};

} // End of namespace GIOP

//
// IDL:omg.org/GIOP:1.0
//
namespace OBProxy_GIOP
{

} // End of namespace OBProxy_GIOP

//
// IDL:omg.org/GIOP:1.0
//
namespace OBStubImpl_GIOP
{

} // End of namespace OBStubImpl_GIOP

//
// IDL:omg.org/GIOP:1.0
//
namespace OBMarshalStubImpl_GIOP
{

} // End of namespace OBMarshalStubImpl_GIOP

//
// IDL:omg.org/GIOP:1.0
//
namespace OBV_GIOP
{

} // End of namespace OBV_GIOP

#endif
