// File: PortableInterceptor.idl #ifndef _PORTABLE_INTERCEPTOR_IDL_ #define _PORTABLE_INTERCEPTOR_IDL_ #ifndef CORBA3 #define local #endif #include #include // #include #include #pragma prefix "omg.org" module PortableInterceptor { interface Interceptor { readonly attribute string name; }; exception ForwardRequest { Object forward; }; 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 TRANSPORT_RETRY = 4; typedef unsigned long SlotId; exception InvalidSlot {}; interface Current : CORBA::Current { any get_slot (in SlotId id) raises (InvalidSlot); void set_slot (in SlotId id, in any data) raises (InvalidSlot); }; 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); }; 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_N::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); }; interface ServerRequestInfo : RequestInfo { readonly attribute any sending_exception; 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); }; 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); }; interface ServerRequestInterceptor : Interceptor { 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); }; interface IORInfo { CORBA::Policy get_effective_policy (in CORBA::PolicyType type); void add_ior_component (in IOP::TaggedComponent component); void add_ior_component_to_profile ( in IOP::TaggedComponent component, in IOP::ProfileId profile_id); }; interface IORInterceptor : Interceptor { void establish_components (in IORInfo info); }; interface PolicyFactory { CORBA::Policy create_policy (in CORBA::PolicyType type, in any value) raises (CORBA::PolicyError); }; 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); }; interface ORBInitializer { void pre_init (in ORBInitInfo info); void post_init (in ORBInitInfo info); }; }; #endif // _PORTABLE_INTERCEPTOR_IDL_