Previous section.

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

RPC Service Definition

This chapter specifies the basic operations performed by a Remote Procedure Call (RPC). These operations, which represent the interaction between the service user and the service provider, are specified as service primitives.

The service users are represented in the client stub and client application code and in the server stub, server manager routines and server application code, which provide the appropriate parameter values and process the results.

The service provider is represented in the RPC run-time system and is specified in the protocol machines, which generate and receive the events driven by the service primitives.

Call Representation Data Structure

The call representation data structure is an input parameter to all service primitives described here. Some information is dynamically generated during the sequence of common service operations that comprise an RPC.

The call representation data structure contains all of the control information about an individual RPC. This includes location and interface information. An interface specification and an operation number define the interface information. Dynamic information includes the transfer syntax in which the RPC arguments are marshalled, and cancel state information.

An RPC protocol machine may have specific information particular to an RPC. To facilitate this, the call representation data structure is composed of a common part and a protocol-specific part. A call handle is provided to the RPC stubs as an opaque pointer to the the call representation data structure.

Service Primitives

The tables in this chapter, which specify the parameters that are present in each service primitive, use the following notation, as described in the ISO TR 8509 standard:

M
The parameter is mandatory. It will always be present in the service primitive.

U
The parameter is a user option. It need not be provided by the user in the particular instance of the service primitive.

C
The parameter is conditional. It will always be present in that indication-type primitive if it was present in the corresponding request-type primitive.

(=)
When the parameter is present in a particular instance of that indication-type primitive, it takes the same value it had in the corresponding request-type primitive.

Invoke

The Invoke service primitive is used to invoke an RPC. The Invoke service primitive is service user-initiated.

Invoke Parameters lists the parameters of the Invoke service primitive.

Parameter Name Request Indication
Call_Handle M M
Call_Args U C(=)
Call_Status - M

Table: Invoke Parameters

The permitted parameter values are as follows:

Call_Handle
The call handle that uniquely identifies this RPC.

Call_Args
The marshalled call arguments according to the parameters specified in the interface operation (IDL), if any.

Call_Status
A value indicating the status of the operation. For a summary of possible condition values that this operation can return, refer to Reject Status Codes and Parameters .

The events and triggering conditions generated by this service primitive are:

START_CALL, TRANSMIT_REQ

The client user issues an RPC and generates the event START_CALL. The conditional flag TRANSMIT_REQ indicates that there is data in the send queue (request-type primitive).

RECEIVE_PDU[REQUEST_PDU]

The server provider generates the event RECEIVE_PDU (conditionally REQUEST_PDU) upon receiving a REQUEST PDU (indication-type primitive).

RCV_LAST_IN_FRAG

The server provider promotes the requested operation (including input data, if any) to the server user (server stub and manager routine) for execution.

Result

The Result service primitive is used to return the output and input/output parameters at the end of a normal execution of the invoked RPC. The Result service primitive is server-user (server manager routine) initiated.

Result Parameters lists the parameters of the Result service primitive.

Parameter Name Response Confirmation
Call_Handle M M
Result_Args U C(=)
Call_Status - M

Table: Result Parameters

The permitted parameter values are as follows:

Call_Handle
The call handle that uniquely identifies this RPC.

Result_Args
The marshalled output and input/output arguments according to the parameters specified in the interface operation (IDL), if any.

Call_Status
A value indicating the status of the operation. For a summary of possible condition values that this operation can return, refer to Reject Status Codes and Parameters .

The events and triggering conditions generated by the Result service primitive are as follows:

PROC_RESPONSE, TRANSMIT_RESP

The server user processed this RPC request and generates the event PROC_RESPONSE. The conditional flag TRANSMIT_RESP indicates data in the send queue (response-type primitive).

RECEIVE_PDU[RESPONSE_PDU]

The client provider generates the event RECEIVE_PDU (conditionally RESPONSE_PDU) upon receiving a response PDU (confirmation-type primitive).

Cancel

The Cancel service primitive is used to cancel an outstanding RPC. This operation forwards a client cancel request to the server application thread. If the server application thread does not return within a caller-specified time, the RPC will fail. Most of this processing is specific to the associated protocol machines.

Cancel Parameters lists the parameters of the Cancel service primitive.

Parameter Name Request Indication
Call_Handle M M

Table: Cancel Parameters

The permitted parameter value is as follows:

Call_Handle
The call handle that uniquely identifies this RPC. The cancel-related data values and flags are modified appropriately.

The events and actions generated by the Cancel service primitive are:

CLIENT_CANCEL
The client user has issued a request to terminate a call in progress. The event CLIENT_CANCEL is generated.

RCV_CAN_PDU
The server provider receives a cancel PDU and generates the event RCV_CAN_PDU (RECEIVE_PDU, conditionally CANCEL_PDU).

CANCEL_NOTIFY_APP

The server provider notifies the server user about a pending cancel request.

Error

The Error service primitive may be used by the server manager routine to indicate an error in response to a previous Invoke indication. The Error service primitive is server-user (server manager routine) initiated.

Error Parameters lists the parameters of the Error service primitive.

Parameter Name Response Confirmation
Call_Handle M M
Call_Error_Value M M(=)

Table: Error Parameters

The permitted parameter values are:

Call_Handle
The call handle that uniquely identifies this RPC.

Call_Error_Value
The marshalled error information.

The events generated by the Error service primitive are as follows:

PROCESSING_FAULT

The server user detected a fault during execution of the requested operation and raises the event PROCESSING_FAULT.

RCV_FAULT
The client provider generates the event RCV_FAULT upon receiving a fault PDU with fault status code.

Reject

The Reject service primitive indicates that there is a problem with the underlying communications or the RPC protocol machines. The reject reason (parameter, Call_Reject_Reason) can indicate the state of a particular RPC and therefore may be evaluated to determine whether the call has already been executed at the server. The Reject service primitive is typically server provider-initiated. Some reject reasons such as Op_Range_Error are detected at the server user and are server user-initiated.

Reject Parameters lists the parameters of the Reject service primitive.

Parameter Name Response Confirmation
Call_Handle M M
Call_Reject_Reason M M(=)

Table: Reject Parameters

The permitted parameter values are:

Call_Handle
The call handle that uniquely identifies this RPC.

Call_Reject_Reason
The marshalled reject information. For a summary of which reject status codes are reported, refer to Reject Status Codes .

The events generated by the Reject service primitive are as follows:

PROCESSING_FDNE

The server provider or server user rejects the execution of the requested operation (FaultDidNotExecute) and raises the event PROCESSING_FDNE.

RCV_FAULT
The client provider generates the event RCV_FAULT upon receiving either a reject PDU or a fault PDU with a reject status code.


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