summaryrefslogtreecommitdiff
path: root/TAO/tao/IOP_Defns.h
blob: a7b94e3a9792489bee58cd836f06f6a25ffd823d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
//-*- C++ -*-
//=============================================================================
/**
 *  @file    IOP_Defns.h
 *
 *  $Id$
 *
 *  Definitions for IOP related classes. IOP definitions are part of
 *  the Interoperability model specified by the CORBA spec.
 *
 *
 *  @author Taken from the old GIOP.h file. Not sure of the author
 */
//=============================================================================

#ifndef _TAO_IOP_DEFN_H_
#define _TAO_IOP_DEFN_H_
#include "ace/pre.h"

// These were all in the GIOP.h file. They shouldn't be combined with
// GIOP as they are not specific to GIOP. They are part of the CORBA
// Interoperable reference model.

// namespace TAO_IOP

// Assigned Protocol/Profile tag values.  ORB protcols may be uniquely
// identified by tags such as these.  This allows each ORB's own
// objref profiles to be interchanged using IORs.
//
// Email to tag-request@omg.org to allocate tags.
typedef CORBA::ULong TAO_IOP_Profile_ID;

/**
 * @class TAO_IOP_Tagged_Profile
 *
 * @brief One per protocol.
 */
class TAO_IOP_Tagged_Profile
{
public:
  TAO_IOP_Profile_ID tag;
  TAO_opaque profile_data;
};

typedef TAO_Unbounded_Sequence<TAO_IOP_Tagged_Profile>
        TAO_IOP_Tagged_Profile_Sequence;

/**
 * @class TAO_IOP_IOR
 *
 * @brief InteroperableObjectReference
 *
 * ... a set of protocol-specific protocol profiles, plus a type
 * ID.  Only one object is denoted by all of this information.
 * It's OK to delete all profiles except the one for the single
 * protocol actually being used.
 */
class TAO_IOP_IOR
{

public:
  char *type_id;
  TAO_IOP_Tagged_Profile_Sequence profiles;
};

// Some protocols can be factored into a set of optional components.
// Use of such components is defined by the protocol's specification.
//
// Email to tag-request@omg.org to allocate tags.

typedef CORBA::ULong TAO_IOP_ComponentId;

enum
{
  // = DESCRIPTION
  //   These are all defined by DCE-CIOP in OMG TC document 95-3-10.
  //   We don't use them in TAO, it is a left over from the SunSoft
  //   IIOP engine times!

  TAO_IOP_TAG_DCE_STRING_BINDING = 100,// string binding handle
  TAO_IOP_TAG_DCE_BINDING_NAME = 101, // CDS/GDS/... name
  TAO_IOP_TAG_DCE_NO_PIPES = 102, // no component data
  TAO_IOP_TAG_OBJECT_KEY = 10,  // opaque
  TAO_IOP_TAG_ENDPOINT_ID = 11, // uuid
  TAO_IOP_TAG_LOCATION_POLICY = 12 // octet/enum
};

/**
 * @class TAO_IOP_TaggedComponent
 *
 * One way to represent multicomponent profiles, e.g. as done by
 * the DCE-CIOP protocol.  One of these gets encapsulated in
 * Tagged_Profile::profile_data.  TAG_MULTIPLE_COMPONENTS may be
 * used to represent protocol profiles structured in that way, but
 * protocol-specific tags facilitate simpler scanning of IORs
 * since you can be assured that each profile only has data used
 * within a single ORB protocol.
 */
class TAO_IOP_TaggedComponent
{
public:

  TAO_IOP_ComponentId tag;
  TAO_opaque component_data;
};

// ****************************************************************

typedef TAO_Unbounded_Sequence<TAO_IOP_TaggedComponent>
        TAO_IOP_MultipleComponentProfile;

#include "ace/post.h"
#endif /*_TAO_IOP_DEFN_H_*/