summaryrefslogtreecommitdiff
path: root/TAO/tao/PortableInterceptor.pidl
blob: 61dbfdcba82abd2030f87021808cbd575e5295b7 (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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
// -*- IDL -*-

/**
 * @file PortableInterceptor.pidl
 *
 * $Id$
 *
 * @brief Pre-compiled IDL source for the PortableInterceptor
 * components in the ORB.
 *
 * This file contains the interface definitions for "Portable"
 * Interceptor support.
 * The following is from orbos/99-12-02 Portable Interceptors spec,
 * the full IDL is downloadable from orbos/99-12-02.
 *
 * Additional updates from ptc/00-08-05 are also included.  Changes
 * include:
 *    - addition of the Interceptor::destroy() method
 *    - move of CodecFactory and Codec interfaces to the IOP module
 *
 * This file was used to generate the code in PortableInterceptorC.*
 * The command used to generate code is:
 *
 *  tao_idl
 *     -o orig -Gp -Gd -Ge 1 -GT -GA -Sc
 *          -Wb,export_macro=TAO_Export
 *          -Wb,pre_include="ace/pre.h"
 *          -Wb,post_include="ace/post.h"
 *          PortableInterceptor.pidl
 *
 * Patches for changes to the generated code are available in the
 * `diffs' directory.
 * Move the typecodes for exceptions in PortableIntercaptorA.cpp to
 * PortableInterceptorC.cpp.
 */

// File: PortableInterceptor.idl
#ifndef _PORTABLE_INTERCEPTOR_IDL_
#define _PORTABLE_INTERCEPTOR_IDL_

#include <PI_Forward.pidl>
#include <Current.pidl>
#include <Dynamic.pidl>
#include <Messaging_SyncScope.pidl>
#include <IOP_Codec.pidl>
#include <IOP_IOR.pidl>

module PortableInterceptor {

  typeprefix PortableInterceptor "omg.org";

  local interface Interceptor
  {
    readonly attribute string name;
    void destroy ();
  };

  exception ForwardRequest
  {
    Object forward;
    boolean permanent;
  };

  typedef short ReplyStatus;

  // Valid reply_status values:
  const ReplyStatus SUCCESSFUL = 0;
  const ReplyStatus SYSTEM_EXCEPTION = 1;
  const ReplyStatus USER_EXCEPTION = 2;
  const ReplyStatus LOCATION_FORWARD = 3;
  const ReplyStatus LOCATION_FORWARD_PERMANENT = 4;  // @@ TO BE REMOVED
  const ReplyStatus TRANSPORT_RETRY = 5;  // @@ TO BE RENUMBERED to 4
  const ReplyStatus UNKNOWN = 6;          // @@ TO BE RENUMBERED to 5

  typedef unsigned long SlotId;

  exception InvalidSlot {};

  local interface Current : CORBA::Current
  {
    any get_slot (in SlotId id) raises (InvalidSlot);
    void set_slot (in SlotId id, in any data) raises (InvalidSlot);
  };

  local interface RequestInfo
  {
    readonly attribute unsigned long request_id;
    readonly attribute string operation;
    readonly attribute Dynamic::ParameterList arguments;
    readonly attribute Dynamic::ExceptionList exceptions;
    readonly attribute Dynamic::ContextList contexts;
    readonly attribute Dynamic::RequestContext operation_context;
    readonly attribute any result;
    readonly attribute boolean response_expected;
    readonly attribute Messaging::SyncScope sync_scope;
    readonly attribute ReplyStatus reply_status;
    readonly attribute Object forward_reference;
    any get_slot (in SlotId id) raises (InvalidSlot);
    IOP::ServiceContext get_request_service_context (in IOP::ServiceId id);
    IOP::ServiceContext get_reply_service_context (in IOP::ServiceId id);
  };

  local interface ClientRequestInfo : RequestInfo
  {
    readonly attribute Object target;
    readonly attribute Object effective_target;
    readonly attribute IOP::TaggedProfile effective_profile;
    readonly attribute any received_exception;
    readonly attribute CORBA::RepositoryId received_exception_id;
    IOP::TaggedComponent get_effective_component (in IOP::ComponentId id);
    IOP::TaggedComponentSeq get_effective_components (in IOP::ComponentId id);
    CORBA::Policy get_request_policy (in CORBA::PolicyType type);
    void add_request_service_context (
      in IOP::ServiceContext service_context,
      in boolean replace);
  };

  local interface ServerRequestInfo : RequestInfo
  {
    readonly attribute any sending_exception;
    readonly attribute ServerId server_id;
    readonly attribute ORBId orb_id;
    readonly attribute AdapterName adapter_name;
    readonly attribute CORBA::OctetSeq object_id;
    readonly attribute CORBA::OctetSeq adapter_id;
    readonly attribute CORBA::RepositoryId target_most_derived_interface;
    CORBA::Policy get_server_policy (in CORBA::PolicyType type);
    void set_slot (in SlotId id, in any data) raises (InvalidSlot);
    boolean target_is_a (in CORBA::RepositoryId id);
    void add_reply_service_context (
      in IOP::ServiceContext service_context,
      in boolean replace);
  };

  local interface ClientRequestInterceptor : Interceptor
  {
    void send_request  (in ClientRequestInfo ri) raises (ForwardRequest);
    void send_poll (in ClientRequestInfo ri);
    void receive_reply (in ClientRequestInfo ri);
    void receive_exception (in ClientRequestInfo ri) raises (ForwardRequest);
    void receive_other (in ClientRequestInfo ri) raises (ForwardRequest);
  };

  local interface ServerRequestInterceptor : Interceptor
  {
    /// Proprietary method in TAO for fault tolerance
    void tao_ft_interception_point (in ServerRequestInfo ri, out CORBA::OctetSeq os) raises (ForwardRequest);
    void receive_request_service_contexts (in ServerRequestInfo ri) raises (ForwardRequest);
    void receive_request (in ServerRequestInfo ri) raises (ForwardRequest);
    void send_reply (in ServerRequestInfo ri);
    void send_exception (in ServerRequestInfo ri) raises (ForwardRequest);
    void send_other (in ServerRequestInfo ri) raises (ForwardRequest);
  };

  local interface PolicyFactory
  {
    CORBA::Policy create_policy (in CORBA::PolicyType type, in any value)
      raises (CORBA::PolicyError);
  };

  local interface IORInterceptor;

  local interface ORBInitInfo
  {
    typedef string ObjectId;

    exception DuplicateName
    {
      string name;
    };

    exception InvalidName {};

    readonly attribute CORBA::StringSeq arguments;
    readonly attribute string orb_id;
    readonly attribute IOP::CodecFactory codec_factory;

    void register_initial_reference (in ObjectId id, in Object obj)
      raises (InvalidName);
    Object resolve_initial_references (in ObjectId id)
      raises (InvalidName);
    void add_client_request_interceptor (
      in ClientRequestInterceptor interceptor)
      raises (DuplicateName);
    void add_server_request_interceptor (
      in ServerRequestInterceptor interceptor)
      raises (DuplicateName);
    void add_ior_interceptor (in IORInterceptor interceptor)
      raises (DuplicateName);
    SlotId allocate_slot_id ();
    void register_policy_factory (
      in CORBA::PolicyType type,
      in PolicyFactory policy_factory);
  };

  local interface ORBInitializer
  {
    void pre_init (in ORBInitInfo info);
    void post_init (in ORBInitInfo info);
  };

};

#endif  /* _PORTABLE_INTERCEPTOR_IDL_ */