// File: MessageRouting.idl
// CORBA 3.0, Chapter 22

#ifndef _MESSAGE_ROUTING_IDL_
#define _MESSAGE_ROUTING_IDL_

#ifdef _PRE_3_0_COMPILER_ 
#pragma prefix "omg.org"
#include <orb.idl>
#include <GIOP.idl>
#include <IOP.idl>
#include <Messaging.idl>
#else
//PolyORB:NI:import ::CORBA;
//PolyORB:NI:import ::GIOP;
//PolyORB:NI:import ::IOP;
//PolyORB:NI:import ::Messaging;
#endif // _PRE_3_0_COMPILER_

//PolyORB:NI:module MessageRouting{
//PolyORB:NI:
//PolyORB:NI:#ifndef _PRE_3_0_COMPILER_ 
//PolyORB:NI:    typeprefix MessageRouting "omg.org";
//PolyORB:NI:#endif // _PRE_3_0_COMPILER_
//PolyORB:NI:
//PolyORB:NI:    // Basic routing Interoperability
//PolyORB:NI:
//PolyORB:NI:    interface Router;
//PolyORB:NI:    interface RouterAdmin;
//PolyORB:NI:
//PolyORB:NI:    typedef sequence<Router> RouterList;
//PolyORB:NI:
//PolyORB:NI:    struct MessageBody {
//PolyORB:NI:        sequence<octet> body;
//PolyORB:NI:        boolean byte_order;
//PolyORB:NI:    };
//PolyORB:NI:
//PolyORB:NI:    struct RequestMessage {
//PolyORB:NI:        GIOP::Version giop_version;
//PolyORB:NI:        IOP::ServiceContextList service_contexts;
//PolyORB:NI:        octet response_flags;
//PolyORB:NI:        octet reserved[3];
//PolyORB:NI:        sequence<octet> object_key;
//PolyORB:NI:        string operation;
//PolyORB:NI:        MessageBody body;
//PolyORB:NI:    };
//PolyORB:NI:
//PolyORB:NI:    enum ReplyDisposition { TYPED, UNTYPED };
//PolyORB:NI:
//PolyORB:NI:    struct ReplyDestination {
//PolyORB:NI:        ReplyDisposition handler_type;
//PolyORB:NI:        Messaging::ReplyHandler handler;
//PolyORB:NI:        sequence<string> typed_excep_holder_repids;
//PolyORB:NI:    };
//PolyORB:NI:
//PolyORB:NI:    struct RequestInfo {
//PolyORB:NI:        RouterList visited;
//PolyORB:NI:        RouterList to_visit;
//PolyORB:NI:        Object target;
//PolyORB:NI:        unsigned short profile_index;
//PolyORB:NI:        ReplyDestination reply_destination;
//PolyORB:NI:        Messaging::PolicyValueSeq selected_qos;
//PolyORB:NI:        RequestMessage payload;
//PolyORB:NI:    };
//PolyORB:NI:
//PolyORB:NI:    typedef sequence<RequestInfo> RequestInfoSeq;
//PolyORB:NI:
//PolyORB:NI:    interface Router {
//PolyORB:NI:        void send_request(in RequestInfo req);
//PolyORB:NI:        void send_multiple_requests(in RequestInfoSeq reqSeq);
//PolyORB:NI:
//PolyORB:NI:        readonly attribute RouterAdmin admin;
//PolyORB:NI:    };
//PolyORB:NI:
//PolyORB:NI:    // Polling-related interfaces
//PolyORB:NI:
//PolyORB:NI:    interface UntypedReplyHandler : Messaging::ReplyHandler {
//PolyORB:NI:        void reply(
//PolyORB:NI:            in string operation_name,
//PolyORB:NI:            in GIOP::ReplyStatusType reply_type,
//PolyORB:NI:            in MessageBody reply_body);
//PolyORB:NI:    };
//PolyORB:NI:
//PolyORB:NI:    exception ReplyNotAvailable { };
//PolyORB:NI:
//PolyORB:NI:    interface PersistentRequest {
//PolyORB:NI:        readonly attribute boolean reply_available;
//PolyORB:NI:        GIOP::ReplyStatusType get_reply(
//PolyORB:NI:            in boolean blocking,
//PolyORB:NI:            in unsigned long timeout,
//PolyORB:NI:            out MessageBody reply_body)
//PolyORB:NI:            raises (ReplyNotAvailable);
//PolyORB:NI:        attribute Messaging::ReplyHandler associated_handler;
//PolyORB:NI:    };
//PolyORB:NI:
//PolyORB:NI:    interface PersistentRequestRouter {
//PolyORB:NI:        PersistentRequest create_persistent_request(
//PolyORB:NI:            in unsigned short profile_index,
//PolyORB:NI:            in RouterList to_visit,
//PolyORB:NI:            in Object target,
//PolyORB:NI:            in CORBA::PolicyList current_qos,
//PolyORB:NI:            in RequestMessage payload);
//PolyORB:NI:    };
//PolyORB:NI:
//PolyORB:NI:    // Router Administration
//PolyORB:NI:
//PolyORB:NI:    typedef short RegistrationState;
//PolyORB:NI:    const RegistrationState NOT_REGISTERED = 0;
//PolyORB:NI:    const RegistrationState ACTIVE = 1;
//PolyORB:NI:    const RegistrationState SUSPENDED = 2;
//PolyORB:NI:
//PolyORB:NI:    exception InvalidState{
//PolyORB:NI:        RegistrationState registration_state;
//PolyORB:NI:    };
//PolyORB:NI:
//PolyORB:NI:    valuetype RetryPolicy supports CORBA::Policy { };
//PolyORB:NI: 
//PolyORB:NI:    const CORBA::PolicyType IMMEDIATE_SUSPEND_POLICY_TYPE = 36;
//PolyORB:NI:
//PolyORB:NI:    valuetype ImmediateSuspend : RetryPolicy { };
//PolyORB:NI:
//PolyORB:NI:    const CORBA::PolicyType UNLIMITED_PING_POLICY_TYPE = 37;
//PolyORB:NI:
//PolyORB:NI:    valuetype UnlimitedPing : RetryPolicy {
//PolyORB:NI:        public short max_backoffs;
//PolyORB:NI:        public float backoff_factor;
//PolyORB:NI:        public unsigned long base_interval_seconds;
//PolyORB:NI:    };
//PolyORB:NI:
//PolyORB:NI:    const CORBA::PolicyType LIMITED_PING_POLICY_TYPE = 38;
//PolyORB:NI:
//PolyORB:NI:    valuetype LimitedPing : UnlimitedPing {
//PolyORB:NI:        public unsigned long interval_limit;
//PolyORB:NI:    };
//PolyORB:NI:
//PolyORB:NI:    const CORBA::PolicyType DECAY_POLICY_TYPE = 39;
//PolyORB:NI:
//PolyORB:NI:    valuetype DecayPolicy supports CORBA::Policy {
//PolyORB:NI:        public unsigned long decay_seconds;
//PolyORB:NI:    };
//PolyORB:NI:
//PolyORB:NI:    const CORBA::PolicyType RESUME_POLICY_TYPE = 40;
//PolyORB:NI:
//PolyORB:NI:    valuetype ResumePolicy supports CORBA::Policy {
//PolyORB:NI:        public unsigned long resume_seconds;
//PolyORB:NI:    };
//PolyORB:NI:
//PolyORB:NI:    interface RouterAdmin {
//PolyORB:NI:        void register_destination(
//PolyORB:NI:            in Object dest,
//PolyORB:NI:            in boolean is_router,
//PolyORB:NI:            in RetryPolicy retry,
//PolyORB:NI:            in DecayPolicy decay);
//PolyORB:NI:        void suspend_destination(
//PolyORB:NI:            in Object dest,
//PolyORB:NI:            in ResumePolicy resumption)
//PolyORB:NI:            raises (InvalidState);
//PolyORB:NI:        void resume_destination(
//PolyORB:NI:            in Object dest)
//PolyORB:NI:            raises (InvalidState);
//PolyORB:NI:        void unregister_destination(
//PolyORB:NI:            in Object dest)
//PolyORB:NI:            raises (InvalidState);
//PolyORB:NI:    };
//PolyORB:NI:
//PolyORB:NI:}; // module MessageRouting
#endif // _MESSAGE_ROUTING_IDL_
