// This file contains OMG IDL from CORBA V2.0, July 1995. // Includes IDL for CORBA Core // (Interface Repository, ORB Interface, Basic Object Adapter Interface) // and CORBA Interoperability (IOP, GIOP, IIOP, and DCE CIOP modules) // Complete OMG IDL for Interface Repository starts on pg 6-42, CORBA V2.0 July 1995 // IRObject interface described on pg 6-9 CORBA V2.0, July 1995 // Contained interface: pg 6-11 CORBA V2, 7-95 // Container interface: pg 6-12 thru 6-15 CORBA V2, 7-95 // IDLType interface: pg 6-15 CORBA V2, 7-95 // Repository interface: pg 6-16 CORBA V2, 7-95 // ModuleDef interface: pg 6-17 CORBA V2, 7-95 // ConstantDef interface: pg 6-18 CORBA V2, 7-95 // TypeDef interface: pg 6-19 CORBA V2, 7-95 // StructDef interface: pg 6-19 CORBA V2, 7-95 // UnionDef interface: pg 6-19 CORBA V2, 7-95 // EnumDef interface: pg 6-20 CORBA V2, 7-95 // AliasDef interface: pg 6-21 CORBA V2, 7-95 // PrimitiveDef interface: pg 6-21 CORBA V2, 7-95 // StringDef interface: pg 6-22 CORBA V2, 7-95 // SequenceDef interface: pg 6-22 CORBA V2, 7-95 // ArrayDef interface: pg 6-23 CORBA V2, 7-95 // ExceptionDef interface: pg 6-24 CORBA V2, 7-95 // AttributeDef interface: pg 6-25 CORBA V2, 7-95 // OperationDef interface: pg 6-26 CORBA V2, 7-95 // InterfaceDef interface: pg 6-28 CORBA V2, 7-95 // TypeCode interface (PIDL): pg 6-34 CORBA V2, 7-95 // ORB interface: pg 6-40 CORBA V2, 7-95 #ifndef __CORBA_IDL #define __CORBA_IDL // #pragma prefix "omg.org" module CORBA { interface TypeCode; typedef string Identifier; typedef string ScopedName; typedef string RepositoryId; /* * start of section added by Christian Blum */ typedef enum new_type {NO,USER,SYSTEM_EXCEPTION} exception_type; /** * no definition for this type */ interface ImplementationDef { }; /** * no definition for this type */ //interface Principal struct Principal { string str; }; /** * no definition for this type */ interface Environment { }; typedef unsigned long Flags; typedef unsigned long Status; struct NamedValue // PIDL { Identifier name; // argument name any argument; // argument long len; // length/count of argument value Flags arg_modes; // argument mode flags }; typedef sequence NVList; /* C */ interface Request // PIDL { Status add_arg ( in Identifier name, // argument name in TypeCode arg_type, // argument datatype // in void * value, // argument value to be added in any value_LOOK_AT_SOURCE, // changed by blum in long len, // length/count of argument value in Flags arg_flags // argument flags ); Status invoke ( in Flags invoke_flags // invocation flags ); Status delete (); Status send ( in Flags invoke_flags // invocation flags ); Status get_response ( in Flags response_flags // response flags ); }; interface Context // PIDL { Status set_one_value ( in Identifier prop_name, // property name to add in string value // property value to add ); Status set_values ( in NVList values // property values to be changed ); Status get_values ( in Identifier start_scope, // search scope in Flags op_flags, // operation flags in Identifier prop_name, // name of property(s) to retrieve out NVList values // requested property(s) ); Status delete_values ( in Identifier prop_name // name of property(s) to delete ); Status create_child ( in Identifier ctx_name, // name of context object out Context child_ctx // newly created context object ); Status delete ( in Flags del_flags // flags controlling deletion ); }; /* * end of section added by Christian Blum */ enum DefinitionKind { dk_none, dk_all, dk_Attribute, dk_Constant, dk_Exception, dk_Interface, dk_Module, dk_Operation, dk_Typedef, dk_Alias, dk_Struct, dk_Union, dk_Enum, dk_Primitive, dk_String, dk_Sequence, dk_Array, dk_Repository }; interface IRObject { // read interface readonly attribute DefinitionKind def_kind; // write interface void destroy (); }; typedef string VersionSpec; interface Contained; interface Repository; interface Container; interface Contained : IRObject { // read/write interface attribute RepositoryId id; attribute Identifier name; attribute VersionSpec version; // read interface readonly attribute Container defined_in; readonly attribute ScopedName absolute_name; readonly attribute Repository containing_repository; struct Description { DefinitionKind kind; any value; }; Description describe (); // write interface void move ( in Container new_container, in Identifier new_name, in VersionSpec new_version ); }; interface ModuleDef; interface ConstantDef; interface IDLType; interface StructDef; interface UnionDef; interface EnumDef; interface AliasDef; interface InterfaceDef; typedef sequence InterfaceDefSeq; typedef sequence ContainedSeq; struct StructMember { Identifier name; TypeCode type; IDLType type_def; }; typedef sequence StructMemberSeq; struct UnionMember { Identifier name; any label; TypeCode type; IDLType type_def; }; typedef sequence UnionMemberSeq; typedef sequence EnumMemberSeq; interface Container : IRObject { // read interface Contained lookup ( in ScopedName search_name); ContainedSeq contents ( in DefinitionKind limit_type, in boolean exclude_inherited ); ContainedSeq lookup_name ( in Identifier search_name, in long levels_to_search, in DefinitionKind limit_type, in boolean exclude_inherited ); struct Description { Contained contained_object; DefinitionKind kind; any value; }; typedef sequence DescriptionSeq; DescriptionSeq describe_contents ( in DefinitionKind limit_type, in boolean exclude_inherited, in long max_returned_objs ); // write interface ModuleDef create_module ( in RepositoryId id, in Identifier name, in VersionSpec version ); ConstantDef create_constant ( in RepositoryId id, in Identifier name, in VersionSpec version, in IDLType type, in any value ); StructDef create_struct ( in RepositoryId id, in Identifier name, in VersionSpec version, in StructMemberSeq members ); UnionDef create_union ( in RepositoryId id, in Identifier name, in VersionSpec version, in IDLType discriminator_type, in UnionMemberSeq members ); EnumDef create_enum ( in RepositoryId id, in Identifier name, in VersionSpec version, in EnumMemberSeq members ); AliasDef create_alias ( in RepositoryId id, in Identifier name, in VersionSpec version, in IDLType original_type ); InterfaceDef create_interface ( in RepositoryId id, in Identifier name, in VersionSpec version, in InterfaceDefSeq base_interfaces ); }; interface IDLType : IRObject { readonly attribute TypeCode type; }; interface PrimitiveDef; interface StringDef; interface SequenceDef; interface ArrayDef; enum PrimitiveKind { pk_null, pk_void, pk_short, pk_long, pk_ushort, pk_ulong, pk_float, pk_double, pk_boolean, pk_char, pk_octet, pk_any, pk_TypeCode, pk_Principal, pk_string, pk_objref }; interface Repository : Container { // read interface Contained lookup_id (in RepositoryId search_id); PrimitiveDef get_primitive (in PrimitiveKind kind); // write interface StringDef create_string (in unsigned long bound); SequenceDef create_sequence ( in unsigned long bound, in IDLType element_type ); ArrayDef create_array ( in unsigned long length, in IDLType element_type ); }; interface ModuleDef : Container, Contained { }; struct ModuleDescription { Identifier name; RepositoryId id; RepositoryId defined_in; VersionSpec version; }; interface ConstantDef : Contained { readonly attribute TypeCode type; attribute IDLType type_def; attribute any value; }; struct ConstantDescription { Identifier name; RepositoryId id; RepositoryId defined_in; VersionSpec version; TypeCode type; any value; }; interface TypedefDef : Contained, IDLType { }; struct TypeDescription { Identifier name; RepositoryId id; RepositoryId defined_in; VersionSpec version; TypeCode type; }; interface StructDef : TypedefDef { attribute StructMemberSeq members; }; interface UnionDef : TypedefDef { readonly attribute TypeCode discriminator_type; attribute IDLType discriminator_type_def; attribute UnionMemberSeq members; }; interface EnumDef : TypedefDef { attribute EnumMemberSeq members; }; interface AliasDef : TypedefDef { attribute IDLType original_type_def; }; interface PrimitiveDef: IDLType { readonly attribute PrimitiveKind kind; }; interface StringDef : IDLType { attribute unsigned long bound; }; interface SequenceDef : IDLType { attribute unsigned long bound; readonly attribute TypeCode element_type; attribute IDLType element_type_def; }; interface ArrayDef : IDLType { attribute unsigned long length; readonly attribute TypeCode element_type; attribute IDLType element_type_def; }; interface ExceptionDef : Contained { readonly attribute TypeCode type; attribute StructMemberSeq members; }; struct ExceptionDescription { Identifier name; RepositoryId id; RepositoryId defined_in; VersionSpec version; TypeCode type; }; enum AttributeMode {ATTR_NORMAL, ATTR_READONLY}; interface AttributeDef : Contained { readonly attribute TypeCode type; attribute IDLType type_def; attribute AttributeMode mode; }; struct AttributeDescription { Identifier name; RepositoryId id; RepositoryId defined_in; VersionSpec version; TypeCode type; AttributeMode mode; }; enum OperationMode {OP_NORMAL, OP_ONEWAY}; enum ParameterMode {PARAM_IN, PARAM_OUT, PARAM_INOUT}; struct ParameterDescription { Identifier name; TypeCode type; IDLType type_def; ParameterMode mode; }; typedef sequence ParDescriptionSeq; typedef Identifier ContextIdentifier; typedef sequence ContextIdSeq; typedef sequence ExceptionDefSeq; typedef sequence ExcDescriptionSeq; interface OperationDef : Contained { readonly attribute TypeCode result; attribute IDLType result_def; attribute ParDescriptionSeq params; attribute OperationMode mode; attribute ContextIdSeq contexts; attribute ExceptionDefSeq exceptions; }; struct OperationDescription { Identifier name; RepositoryId id; RepositoryId defined_in; VersionSpec version; TypeCode result; OperationMode mode; ContextIdSeq contexts; ParDescriptionSeq parameters; ExcDescriptionSeq exceptions; }; typedef sequence RepositoryIdSeq; typedef sequence OpDescriptionSeq; typedef sequence AttrDescriptionSeq; interface InterfaceDef : Container, Contained, IDLType { // read/write interface attribute InterfaceDefSeq base_interfaces; // read interface boolean is_a (in RepositoryId interface_id); struct FullInterfaceDescription { Identifier name; RepositoryId id; RepositoryId defined_in; VersionSpec version; OpDescriptionSeq operations; AttrDescriptionSeq attributes; RepositoryIdSeq base_interfaces; TypeCode type; }; FullInterfaceDescription describe_interface(); // write interface AttributeDef create_attribute ( in RepositoryId id, in Identifier name, in VersionSpec version, in IDLType type, in AttributeMode mode ); OperationDef create_operation ( in RepositoryId id, in Identifier name, in VersionSpec version, in IDLType result, in OperationMode mode, in ParDescriptionSeq params, in ExceptionDefSeq exceptions, in ContextIdSeq contexts ); }; struct InterfaceDescription { Identifier name; RepositoryId id; RepositoryId defined_in; VersionSpec version; RepositoryIdSeq base_interfaces; }; enum TCKind { tk_null, tk_void, tk_short, tk_long, tk_ushort, tk_ulong, tk_float, tk_double, tk_boolean, tk_char, tk_octet, tk_any, tk_TypeCode, tk_Principal, tk_objref, tk_struct, tk_union, tk_enum, tk_string, tk_sequence, tk_array, tk_alias, tk_except }; interface TypeCode { // PIDL exception Bounds {}; exception BadKind {}; // for all TypeCode kinds boolean equal (in TypeCode tc); TCKind kind (); // for tk_objref, tk_struct, tk_union, tk_enum, tk_alias, and tk_except RepositoryId id () raises (BadKind); // for tk_objref, tk_struct, tk_union, tk_enum, tk_alias, and tk_except Identifier name () raises (BadKind); // for tk_struct, tk_union, tk_enum, and tk_except unsigned long member_count () raises (BadKind); Identifier member_name (in unsigned long index) raises (BadKind, Bounds); // for tk_struct, tk_union, and tk_except TypeCode member_type (in unsigned long index) raises (BadKind, Bounds); // for tk_union any member_label (in unsigned long index) raises (BadKind, Bounds); TypeCode discriminator_type () raises (BadKind); long default_index () raises (BadKind); // for tk_string, tk_sequence, and tk_array unsigned long length () raises (BadKind); // for tk_sequence, tk_array, and tk_alias TypeCode content_type () raises (BadKind); // deprecated interface long param_count (); any parameter (in long index) raises (Bounds); }; /* * following line added by Christian Blum */ interface BOA; interface ORB { // other operations ... TypeCode create_struct_tc ( in RepositoryId id, in Identifier name, in StructMemberSeq members ); TypeCode create_union_tc ( in RepositoryId id, in Identifier name, in TypeCode discriminator_type, in UnionMemberSeq members ); TypeCode create_enum_tc ( in RepositoryId id, in Identifier name, in EnumMemberSeq members ); TypeCode create_alias_tc ( in RepositoryId id, in Identifier name, in TypeCode original_type ); TypeCode create_exception_tc ( in RepositoryId id, in Identifier name, in StructMemberSeq members ); TypeCode create_interface_tc ( in RepositoryId id, in Identifier name ); TypeCode create_string_tc ( in unsigned long bound ); TypeCode create_sequence_tc ( in unsigned long bound, in TypeCode element_type ); TypeCode create_recursive_sequence_tc ( in unsigned long bound, in unsigned long offset ); TypeCode create_array_tc ( in unsigned long length, in TypeCode element_type ); /* * following line commented out by Christian Blum */ // }; // The ORB interface (PIDL) is described in Chapter 7, CORBA V2.0 July 1995 // Object interface (object reference operations): pg 7-3 CORBA V2, 7-95 // ORB initialization: pg 7-7 CORBA V2, 7-95 // Object Adapter and Basic Object Adapter initialization: pg 7-8 CORBA V2 7-95 // Getting initial references: pg 7-10 CORBA V2 7-95 //PIDL /* * following line commented out by Christian Blum */ //interface ORB { string object_to_string (in Object obj); Object string_to_object (in string str); Status create_list ( in long count, out NVList new_list ); Status create_operation_list ( in OperationDef oper, out NVList new_list ); Status get_default_context (out Context ctx); // Initializing the ORB typedef string ORBid; typedef sequence arg_list; ORB ORB_init (inout arg_list argv, in ORBid orb_identifier); // Initializing an object adapter and the Basic Object Adapter typedef string OAid; // Template for OA initialization operations // _init (inout arg_list argv, // in OAid oa_identifier); BOA BOA_init (inout arg_list argv, in OAid boa_identifier); // Getting initial object references typedef string ObjectId; typedef sequence ObjectIdList; exception InvalidName {}; ObjectIdList list_initial_services (); Object resolve_initial_references (in ObjectId identifier) raises (InvalidName); }; // had to be changed..., Gerald Brose 1996 interface ORBject { ImplementationDef get_implementation (); InterfaceDef get_interface (); boolean is_nil(); Object duplicate (); void release (); boolean is_a (in string logical_type_id); boolean non_existent(); boolean is_equivalent (in Object other_object); unsigned long hash(in unsigned long maximum); Status create_request ( in Context ctx, in Identifier operation, in NVList arg_list, inout NamedValue result, out Request request, in Flags req_flags ); }; // Basic Object Adapter interface described in Chapter 8, CORBA V2.0, July 1995 // interface InterfaceDef; // from Interface Repository // PIDL // interface ImplementationDef; // from Implementation Repository // interface Object; // an object reference // interface Principal; // for the authentication service typedef sequence ReferenceData; interface BOA { Object create ( in ReferenceData id, in InterfaceDef intf, in ImplementationDef impl ); void dispose (in Object obj); ReferenceData get_id (in Object obj); void change_implementation (in Object obj, in ImplementationDef impl ); Principal get_principal (in Object obj, in Environment ev ); void set_exception (in exception_type major, // NO, USER, //or SYSTEM_EXCEPTION in string userid, // exception type id in any param_LOOK_AT_SOURCE // in void *param // pointer to associated data ); void impl_is_ready (in ImplementationDef impl); void deactivate_impl (in ImplementationDef impl); void obj_is_ready (in Object obj, in ImplementationDef impl); void deactivate_obj (in Object obj); }; }; // IOP module described in chap 10 CORBA V2, 7-95 module IOP{ // IDL // // Standard Protocol Profile tag values // typedef unsigned long ProfileId; const ProfileId TAG_INTERNET_IOP = 0; const ProfileId TAG_MULTIPLE_COMPONENTS = 1; struct TaggedProfile { ProfileId tag; sequence profile_data; }; // // an Interoperable Object Reference is a sequence of // object-specific protocol profiles, plus a type ID. // struct IOR { string type_id; sequence profiles; }; // // Standard way of representing multicomponent profiles. // This would be encapsulated in a TaggedProfile. // typedef unsigned long ComponentId; struct TaggedComponent { ComponentId tag; sequence component_data; }; typedef sequence MultipleComponentProfile; typedef unsigned long ServiceID; struct ServiceContext { ServiceID context_id; sequence context_data; }; typedef sequence ServiceContextList; const ServiceID TransactionService = 0; }; // GIOP module described in CORBA V2, 7-95 chap 12 // Complete IDL for GIOP module in CORBA // V2.0, 7-95 p 10-29 // GIOP message header: CORBA V2, 7-95 p 12-16 // GIOP request header: CORBA V2, 7-95 p 12-17 // GIOP reply header: CORBA V2, 7-95 p 12-19 // GIOP cancel request and locate request: CORBA V2, 7-95 pp 12-20 -- 12-21 // GIOP locate reply: CORBA V2, 7-95 p 12-22 module GIOP { // IDL enum MsgType { Request, Reply, CancelRequest, LocateRequest, LocateReply, CloseConnection, MessageError }; struct Version { char major; char minor; }; struct MessageHeader { char magic [4]; Version GIOP_version; boolean byte_order; octet message_type; unsigned long message_size; }; struct RequestHeader { ::IOP::ServiceContextList service_context; unsigned long request_id; boolean response_expected; sequence object_key; string operation; /* * ::CORBA:: added for correct scope */ ::CORBA::Principal requesting_principal; }; enum ReplyStatusType { NO_EXCEPTION, USER_EXCEPTION, SYSTEM_EXCEPTION, LOCATION_FORWARD }; struct ReplyHeader { ::IOP::ServiceContextList service_context; unsigned long request_id; ReplyStatusType reply_status; }; struct CancelRequestHeader { unsigned long request_id; }; struct LocateRequestHeader { unsigned long request_id; sequence object_key; }; enum LocateStatusType { UNKNOWN_OBJECT, OBJECT_HERE, OBJECT_FORWARD }; struct LocateReplyHeader { unsigned long request_id; LocateStatusType locate_status; }; }; // IIOP module described in CORBA V2, 7-95 chap 12 // Complete IDL for IIOP module: CORBA V2, 7-95 p 12-31 module IIOP { // IDL struct Version { char major; char minor; }; struct ProfileBody { Version iiop_version; string host; unsigned short port; sequence object_key; }; }; // DCE CIOP module described in CORBA V2, 7-95 chap 13 // IDL for DCE CIOP module: CORBA V2, 7-95 p 13-2 module DCE_CIOP { struct InvokeRequestHeader { boolean byte_order; ::IOP::ServiceContextList service_context; sequence object_key; string endpoint_id; string operation; ::CORBA::Principal principal; sequence client_context; // in and inout parameters follow }; enum InvokeResponseStatus { INVOKE_NO_EXCEPTION, INVOKE_USER_EXCEPTION, INVOKE_SYSTEM_EXCEPTION, INVOKE_LOCATION_FORWARD, INVOKE_TRY_AGAIN }; struct InvokeResponseHeader { boolean byte_order; ::IOP::ServiceContextList service_context; InvokeResponseStatus status; // if status = INVOKE_NO_EXCEPTION, // result then inouts and outs follow // if status = INVOKE_USER_EXCEPTION or // INVOKE_SYSTEM_EXCEPTION, an exception follows // if status = INVOKE_LOCATION_FORWARD, an // ::IOP::MultipleComponentsProfile follows }; struct LocateRequestHeader { boolean byte_order; sequence object_key; string endpoint_id; string operation; // no body follows }; module IOP { /* * ::IOP:: added to get the right scope */ const ::IOP::ComponentId TAG_OBJECT_KEY = 10; const ::IOP::ComponentId TAG_ENDPOINT_ID = 11; const ::IOP::ComponentId TAG_LOCATION_POLICY = 12; // illegal IDL /* const octet LOCATE_NEVER = 0; const octet LOCATE_OBJECT = 1; const octet LOCATE_OPERATION = 2; const octet LOCATE_ALWAYS = 3; */ }; }; #endif