Previous | Table of Contents | Next |
The dce_ciop_array interface is defined by the DCE IDL specification shown below:
[ /* DCE IDL */uuid(09f9ffb8-97ef-11cf-9c96-0800090b5d3e),/* 2nd revision */version(1.0)]interface dce_ciop_array{
typedef struct { unsigned long length;[size_is(length),ptr] byte *data;
} message_type;
void invoke |
( [in] handle_t binding_handle, [in] message_type *request_message, [out] message_type *response_message); |
||||
} | void locate | ( [in] handle_t binding_handle, [in] message_type *request_message, [out] message_type *response_message); |
ORBs can implement the dce_ciop_array interface, identified by the UUID and version number shown, by using DCE stubs generated
from this IDL specification, or by using lower-level APIs provided by a particular DCE-RPC implementation.
All server ORBs and location agents implementing DCE-CIOP must listen for and handle requests made to the dce_ciop_array interface,
and to maximize interoperability, should listen for requests arriving via all available DCE protocol sequences.
Client ORBs can invoke OMG IDL operations over DCE-CIOP by performing locate and invoke RPCs on the dce_ciop_array interface.
As with the dce_ciop_pipe interface, the first parameter of each dce_ciop_array RPC is a DCE binding handle that identifies
the server process on which to perform the RPC. The remaining parameters are structures containing CDR-encoded messages. The
request_message input parameters send a request message from the client to the server, while the response_message output parameters
return a response message from the server to the client.
The message_type structure used to convey messages is made up of a length member and a data member:
• length - This member indicates the number of bytes in the message.
• data - This member is a full pointer to the first byte of the conformant array containing the message.
The layering of DCE-CIOP messages on DCE-RPC using NDR arrays is illustrated in
Figure 16-2:
Figure 16-2 Array-based Interface Protocol Layering
The NDR stream, formed by concatenating the PDU bodies, is interpreted as the NDR representation of the DCE IDL message_type
structure. The length member is encoded first, followed by the data member. The data member is a full pointer, which is represented
in NDR as a referent ID. In this case, this non-NULL pointer is the first (and only) pointer to the referent, so the referent
ID is 1 and it is followed by the representation of the referent. The referent is a conformant array of bytes, which is represented
in NDR as an unsigned long indicating the length, followed by that number of bytes. The bytes form the DCE-CIOP message.
16.3.2.1 Invoke
The invoke RPC is used by a DCE-CIOP client process to attempt to invoke a CORBA operation in the server process identified
by the binding_handle parameter. The request_message input parameter contains a DCE-CIOP invoke request message. The response_message
output parameter returns a DCE-CIOP invoke response message from the server to the client.
16.3.2.2 Locate
The locate RPC is used by a DCE-CIOP client process to query the server process identified by the binding_handle parameter
for the location of the server process where requests should be sent. The request_message and response_message parameters
are used similarly to the parameters of the invoke RPC.