#pragma prefix "omg.org"

#ifndef _IOP_IDL_
#define _IOP_IDL_

module IOP { 

	typedef unsigned long  ProfileId;
	const ProfileId	 TAG_INTERNET_IOP = 0;
	const ProfileId	 TAG_MULTIPLE_COMPONENTS = 1;

	struct TaggedProfile {
		ProfileId  tag;
		sequence <octet> profile_data;
	};

	struct IOR {
		string	type_id;
		sequence <TaggedProfile> profiles;
	};

	typedef unsigned long ComponentId;

	const ComponentId TAG_ORB_TYPE = 0;
	const ComponentId TAG_CODE_SETS= 1;
	const ComponentId TAG_POLICIES= 2;
	const ComponentId TAG_ALTERNATIVE_IIOP_ADDRESS = 3;
	const ComponentId TAG_ASSOCIATION_OPTIONS = 13;
	// ... others

	struct TaggedComponent {
		ComponentId  tag;
		sequence <octet> component_data;
	};

	typedef sequence <TaggedComponent> MultipleComponentProfile;

	typedef unsigned long ServiceId;

	struct ServiceContext {
 		ServiceId context_id;
 		sequence <octet> context_data;
 	};
	typedef sequence <ServiceContext> ServiceContextList;

	const ServiceId	TransactionService = 0;
	const ServiceId	CodeSets = 1;
	const ServiceId	ChainBypassCheck = 2;
	const ServiceId	ChainBypassInfo = 3;
	const ServiceId	LogicalThreadId = 4;
	const ServiceId	BI_DIR_IIOP = 5;
	const ServiceId	SendingContextRunTime = 6;
	const ServiceId	INVOCATION_POLICIES = 7;
	const ServiceId	FORWARDED_IDENTITY = 8;
	const ServiceId	UnknownExceptionInfo = 9;

};  // IOP module

#endif
