Previous section.

CDE 1.1: Remote Procedure Call
Copyright © 1997 The Open Group

IDL Data Type Declarations

This appendix gives IDL type declarations for a variety of data types. Some of these declarations are used only in Endpoint Mapper Interface Definition , Conversation Manager Interface Definition and Remote Management Interface . If used in an actual implementation, the actual organisation and naming of the IDL import sources including these declarations is implementation-dependent.

Basic Type Declarations

In this section, the interface attribute [pointer_default(ptr)] is assumed in effect, unless explicitly overridden.

The following are declarations for integers of specific sizes:

typedef unsigned small unsigned8; typedef unsigned short unsigned16; typedef unsigned long unsigned32; typedef small signed8; typedef short signed16; typedef long signed32;

The following is the declaration for boolean:

typedef unsigned32 boolean32; /* 32-bit wide boolean */

The following types are used for status return values:

typedef unsigned long error_status_t; const long error_status_ok = 0;

The following types are used for UUIDs:

typedef struct { unsigned32 time_low; unsigned16 time_mid; unsigned16 time_hi_and_version; unsigned8 clock_seq_hi_and_reserved; unsigned8 clock_seq_low; byte node[6]; } uuid_t, *uuid_p_t;

The following is the declaration for protocol towers, the network representation of network addressing information such as RPC bindings. The contents of the tower_octet_string encode the abstract type protocol_tower_t, defined in Common Declarations via the encoding rules defined in Protocol Tower Encoding , with the protocol_tower_t cast into a byte[] type.

typedef struct { unsigned32 tower_length; [size_is(tower_length)] byte tower_octet_string[]; } twr_t, *twr_p_t;

The following are NDR format flag type definitions and values:

const long ndr_c_int_big_endian = 0; const long ndr_c_int_little_endian = 1; const long ndr_c_float_ieee = 0; const long ndr_c_float_vax = 1; const long ndr_c_float_cray = 2; const long ndr_c_float_ibm = 3; const long ndr_c_char_ascii = 0; const long ndr_c_char_ebcdic = 1; typedef struct { unsigned8 int_rep; unsigned8 char_rep; unsigned8 float_rep; byte reserved; } ndr_format_t, *ndr_format_p_t;

The following is the network representation of an IDL context handle:

typedef struct ndr_context_handle { unsigned32 context_handle_attributes; uuid_t context_handle_uuid; } ndr_context_handle;

The following are international character types:

typedef byte ISO_LATIN_1; typedef struct { byte row; byte column; } ISO_MULTI_LINGUAL; typedef struct { byte group; byte plane; byte row; byte column; } ISO_UCS;

The following are authentication protocol IDs. These are architectural values that are carried in RPC protocol messages.

const long dce_c_rpc_authn_protocol_none = 0; const long dce_c_rpc_authn_protocol_krb5 = 1; typedef unsigned8 dce_rpc_authn_protocol_id_t;

Status Codes

This section contains declarations for the status codes that may be sent in connectionless reject and connectionless and connection-oriented fault PDUs. The Open Group DCE specifies the values of these codes; the names are a notational convenience and are not part of the specification.

A distinction can be drawn between protocol-level errors, which are associated with the RPC request/response protocols proper, and application-level errors, which are defined by IDL and the presentation protocol in use (for example, NDR). Errors such as "unknown interface" are in the former category; errors such as "divide-by-zero" are in the latter category.

Protocol-level errors are interpreted by the RPC protocols. They are sent by a server in the body of a connectionless reject PDU or in the status field of the header of a connection-oriented fault PDU.

Application-level errors are understood by stubs, which map these errors to the appropriate application status return values. In both protocols, application-level errors are indicated in the bodies of fault PDUs. The contents of these bodies are untouched by the RPC protocol proper and are simply conveyed from server to client application. In the names below, the application errors are by convention named nca_s_fault_* to distinguish them.

The following status codes are defined:

/* unable to get response from server: */
const long  nca_s_comm_failure              = 0x1C010001;
/* bad operation number in call: */
const long  nca_s_op_rng_error              = 0x1C010002;
/* unknown interface: */
const long  nca_s_unk_if                    = 0x1C010003;
/* client passed server wrong server boot time: */
const long  nca_s_wrong_boot_time           = 0x1C010006;
/* a restarted server called back a client: */
const long  nca_s_you_crashed               = 0x1C010009;
/* someone messed up the protocol: */
const long  nca_s_proto_error               = 0x1C01000B;
/* output args too big: */
const long  nca_s_out_args_too_big          = 0x1C010013;
/* server is too busy to handle call: */
const long  nca_s_server_too_busy           = 0x1C010014;
/* string argument longer than declared max len: */
const long  nca_s_fault_string_too_long     = 0x1C010015;
/* no implementation of generic operation for object: */
const long  nca_s_unsupported_type          = 0x1C010017;

const long  nca_s_fault_int_div_by_zero     = 0x1C000001;
const long  nca_s_fault_addr_error          = 0x1C000002;
const long  nca_s_fault_fp_div_zero         = 0x1C000003;
const long  nca_s_fault_fp_underflow        = 0x1C000004;
const long  nca_s_fault_fp_overflow         = 0x1C000005;
const long  nca_s_fault_invalid_tag         = 0x1C000006;
const long  nca_s_fault_invalid_bound       = 0x1C000007;
const long  nca_s_rpc_version_mismatch      = 0x1C000008;
/* call rejected, but no more detail: */
const long  nca_s_unspec_reject             = 0x1C000009;
const long  nca_s_bad_actid                 = 0x1C00000A;
const long  nca_s_who_are_you_failed        = 0x1C00000B;
const long  nca_s_manager_not_entered       = 0x1C00000C;
const long  nca_s_fault_cancel              = 0x1C00000D;
const long  nca_s_fault_ill_inst            = 0x1C00000E;
const long  nca_s_fault_fp_error            = 0x1C00000F;
const long  nca_s_fault_int_overflow        = 0x1C000010;
/* unused:                                    0x1C000011; */
const long  nca_s_fault_unspec              = 0x1C000012;
const long  nca_s_fault_remote_comm_failure = 0x1C000013;
const long  nca_s_fault_pipe_empty          = 0x1C000014;
const long  nca_s_fault_pipe_closed         = 0x1C000015;
const long  nca_s_fault_pipe_order          = 0x1C000016;
const long  nca_s_fault_pipe_discipline     = 0x1C000017;
const long  nca_s_fault_pipe_comm_error     = 0x1C000018;
const long  nca_s_fault_pipe_memory         = 0x1C000019;
const long  nca_s_fault_context_mismatch    = 0x1C00001A;
const long  nca_s_fault_remote_no_memory    = 0x1C00001B;
const long  nca_s_invalid_pres_context_id   = 0x1C00001C;
const long  nca_s_unsupported_authn_level   = 0x1C00001D;
const long  nca_s_invalid_checksum          = 0x1C00001F;
const long  nca_s_invalid_crc               = 0x1C000020;
const long  nca_s_fault_user_defined        = 0x1C000021;
const long  nca_s_fault_tx_open_failed      = 0x1C000022;
const long  nca_s_fault_codeset_conv_error  = 0x1C000023;
const long  nca_s_fault_object_not_found    = 0x1C000024;
const long  nca_s_fault_no_client_stub      = 0x1C000025;

RPC-specific Data Types

This section contains some RPC-specific data types declarations.

In this section, the interface attribute [pointer_default(ref)] is assumed in effect, unless explicitly overridden.

The following is a declaration of the interface identifier structure, consisting of uuid and major and minor version fields:

typedef struct { uuid_t uuid; unsigned16 vers_major; unsigned16 vers_minor; } rpc_if_id_t; typedef [ptr] rpc_if_id_t *rpc_if_id_p_t;

The following is a declaration of a vector of interface identifiers:

typedef struct { unsigned32 count; [size_is(count)] rpc_if_id_p_t if_id[*]; } rpc_if_id_vector_t; typedef [ptr] rpc_if_id_vector_t *rpc_if_id_vector_p_t;

The following are declarations of version options (choices for matching on version numbers):

const long rpc_c_vers_all = 1; const long rpc_c_vers_compatible = 2; const long rpc_c_vers_exact = 3; const long rpc_c_vers_major_only = 4; const long rpc_c_vers_upto = 5;

The following are declarations of constants for accessing values in statistics vector:

const long rpc_c_stats_calls_in = 0; const long rpc_c_stats_calls_out = 1; const long rpc_c_stats_pkts_in = 2; const long rpc_c_stats_pkts_out = 3; const long rpc_c_stats_array_max_size = 4;

The following is a declaration of a statistics vector returned by management inquiry:

typedef struct { unsigned32 count; unsigned32 stats[1]; /* length_is (count) */ } rpc_stats_vector_t, *rpc_stats_vector_p_t;

The following are declarations of constants for the endpoint service:

const long rpc_c_ep_all_elts = 0; const long rpc_c_ep_match_by_if = 1; const long rpc_c_ep_match_by_obj = 2; const long rpc_c_ep_match_by_both = 3;

Please note that the html version of this specification may contain formatting aberrations. The definitive version is available as an electronic publication on CD-ROM from The Open Group.

Contents Next section Index