#include <TimeBase.idl>

#include <IOP.idl>



#pragma prefix "omg.org"

module Messaging {

	//

	// Messaging Quality of Service

	//

	typedef short RebindMode;

	const RebindMode TRANSPARENT = 0;

	const RebindMode NO_REBIND = 1;

	const RebindMode NO_RECONNECT = 2;

	typedef short SyncScope;

	const SyncScope SYNC_NONE = 0;

	const SyncScope SYNC_WITH_TRANSPORT = 1;

	const SyncScope SYNC_WITH_SERVER = 2;

	const SyncScope SYNC_WITH_TARGET = 3;

	typedef short RoutingType;

	const RoutingType ROUTE_NONE = 0;

	const RoutingType ROUTE_FORWARD = 1;

	const RoutingType ROUTE_STORE_AND_FORWARD = 2;

	typedef TimeBase::TimeT Timeout;

	typedef short Priority;

	typedef unsigned short Ordering;

	const Ordering ORDER_ANY = 0x01;

	const Ordering ORDER_TEMPORAL = 0x02;

	const Ordering ORDER_PRIORITY = 0x04;

	const Ordering ORDER_DEADLINE = 0x08;

	//

	// Locally-Constrained Policy Objects

	//

	// Rebind Policy (default = TRANSPARENT)

	const CORBA::PolicyType REBIND_POLICY_TYPE = 23;

	local interface RebindPolicy : CORBA::Policy {

		readonly attribute RebindMode rebind_mode;

	};

	// Synchronization Policy (default = SYNC_WITH_TRANSPORT)

	const CORBA::PolicyType SYNC_SCOPE_POLICY_TYPE = 24;

	local interface SyncScopePolicy : CORBA::Policy {

		readonly attribute SyncScope synchronization;

	};

	// Priority Policies







	const CORBA::PolicyType REQUEST_PRIORITY_POLICY_TYPE = 25;

	struct PriorityRange {

		Priority min;

		Priority max;

	};

	local interface RequestPriorityPolicy : CORBA::Policy {

		readonly attribute PriorityRange priority_range;

	};

	const CORBA::PolicyType REPLY_PRIORITY_POLICY_TYPE = 26;

	local interface ReplyPriorityPolicy : CORBA::Policy {

		readonly attribute PriorityRange priority_range;

	};

	// Timeout Policies

	const CORBA::PolicyType REQUEST_START_TIME_POLICY_TYPE = 27;

	local interface RequestStartTimePolicy : CORBA::Policy {

		readonly attribute TimeBase::UtcT start_time;

	};

	const CORBA::PolicyType REQUEST_END_TIME_POLICY_TYPE = 28;

	local interface RequestEndTimePolicy : CORBA::Policy {

		readonly attribute TimeBase::UtcT end_time;

	};

	const CORBA::PolicyType REPLY_START_TIME_POLICY_TYPE = 29;

	local interface ReplyStartTimePolicy : CORBA::Policy {

		readonly attribute TimeBase::UtcT start_time;

	};

	const CORBA::PolicyType REPLY_END_TIME_POLICY_TYPE = 30;

	local interface ReplyEndTimePolicy : CORBA::Policy {

		readonly attribute TimeBase::UtcT end_time;

	};

	const CORBA::PolicyType RELATIVE_REQ_TIMEOUT_POLICY_TYPE =

		31;

	local interface RelativeRequestTimeoutPolicy : CORBA::Policy {

		readonly attribute TimeBase::TimeT relative_expiry;

	};

	const CORBA::PolicyType RELATIVE_RT_TIMEOUT_POLICY_TYPE = 32;

	local interface RelativeRoundtripTimeoutPolicy : CORBA::Policy {

		readonly attribute TimeBase::TimeT relative_expiry;

	};

	const CORBA::PolicyType ROUTING_POLICY_TYPE = 33;

	struct RoutingTypeRange {

		RoutingType min;

		RoutingType max;

	};

	local interface RoutingPolicy : CORBA::Policy {

		readonly attribute RoutingTypeRange routing_range;

	};





	const CORBA::PolicyType MAX_HOPS_POLICY_TYPE = 34;

	local interface MaxHopsPolicy : CORBA::Policy {

		readonly attribute unsigned short max_hops;

	};

	// Router Delivery-ordering Policy (default = ORDER_TEMPORAL)

	const CORBA::PolicyType QUEUE_ORDER_POLICY_TYPE = 35;

	local interface QueueOrderPolicy : CORBA::Policy {

		readonly attribute Ordering allowed_orders;

	};

	//

	// Propagation of QoS Policies

	//

	struct PolicyValue {

		CORBA::PolicyType ptype;

		sequence<octet> pvalue;

	};

	typedef sequence<PolicyValue> PolicyValueSeq;

	const IOP::ComponentId TAG_POLICIES = 2;

	const IOP::ServiceId INVOCATION_POLICIES = 7;

	//

	// Exception Delivery in the Callback Model

	//

        // native UserExceptionBase;

        //

        // Replaced with CORBA::UserException below,

        // as specified in the Java mapping.

        //

	valuetype ExceptionHolder {

                void raise_exception() raises (CORBA::UserException);

                void raise_exception_with_list(

                     in CORBA::ExceptionList  exc_list

                ) raises (CORBA::UserException);

		private boolean is_system_exception;

		private boolean byte_order;

		private sequence<octet> marshaled_exception;

	};

        //

	// Base interface for the Callback model

	//

	interface ReplyHandler { };

	//

	// Base value for the Polling model

	//

	/*

	value Poller supports CORBA::Pollable {

		readonly attribute Object operation_target;

		readonly attribute string operation_name;

		attribute ReplyHandler associated_handler;

		readonly attribute boolean is_from_poller;



		Object target;

		string op_name;

	};

	*/

};

