# Compaq TCP/IP Services for OpenVMS
ONC RPC Programming

Previous | Contents | Index

# xdr_vector

> Serializes and deserializes the elements of a fixed-length array (known as a vector).

## Format

> #include <tcpip$rpcxdr.h>

> bool_t xdr_vector(XDR *xdrs, char **vecpp, u_int elnum, u_int elsize, xdrproc_t elproc);

## Arguments

> ### xdrs

> A pointer to an XDR stream handle created by one of the XDR stream-handle creation routines.

> ### vecpp

> A pointer to a pointer to the array.

> ### elnum

> The number of elements in the array.

> ### elsize

> The size, in bytes, of each element.

> ### elproc

> The XDR routine to handle each element.

## Description

> A routine that calls `elproc` to prepare the elements of an array for XDR messages.

## Return Values

> TRUE | Indicates success.
> FALSE | Indicates failure.

# xdr_void

> When there is no data to convert, this routine is passed to ONC RPC routines that require an XDR procedure parameter.

## Format

> #include <tcpip$rpcxdr.h>

> bool_t xdr_void();

## Description

> This routine is used as a placeholder for a program that passes no data in a remote procedure call. Most client and server routines expect an XDR routine to be called, even when there is no data to pass.

## Return Values

> This routine always returns TRUE.

# xdr_wrapstring

> Serializes and deserializes `NULL` -terminated strings.

## Format

> #include <tcpip$rpcxdr.h>

> bool_t xdr_wrapstring(XDR *xdrs, char **spp);

## Arguments

> ### xdrs

> A pointer to an XDR stream handle created by one of the XDR stream-handle creation routines.

> ### spp

> A pointer to a pointer to a string.

## Description

> A primitive that calls `xdr_string(xdrs, sp, MAXUNSIGNED)` , where `MAXUNSIGNED` is the maximum value of an unsigned integer. This routine is useful because the ONC RPC client and server routines pass the XDR stream handle and a single pointer as parameters to any referenced XDR routines. The `xdr_string` routine, one of the most frequently used ONC RPC primitives, requires three parameters.

> While decoding, if `*sp` is `NULL` , the necessary storage is allocated to hold the NULL-terminated string and `*sp` is set to point to it.

## Return Values

> TRUE | Indicates success.
> FALSE | Indicates failure.

# xdrmem_create

> Initializes an XDR stream descriptor for a memory buffer.

## Format

> #include <tcpip$rpcxdr.h>

> void xdrmem_create(XDR *xdrs, char *addr, u_int size, enum xdr_op op);

## Arguments

> ### xdrs

> A pointer to the XDR stream handle being created. The routine `xdrmem_create` fills in `xdrs` with encoding and decoding information.

> ### addr

> A pointer to the memory buffer.

> ### size

> The length of the memory buffer.

> ### op

> An XDR operation, one of: `XDR_ENCODE` , `XDR_DECODE` , and `XDR_FREE` .

## Description

> The stream handle `xdrs` is initialized with the operation `op` , the buffer `addr` and `size` , and the operations context for an `xdrmem` stream.

## Return Values

> None |

# xdrrec_create

> Initializes a record-oriented XDR stream descriptor.

## Format

> #include <tcpip$rpcxdr.h>

> void xdrrec_create(XDR *xdrs, u_int sendsize, u_int recvsize, char *tcp_handle, int (*readit)(), int (*writeit)());

## Arguments

> ### xdrs

> A pointer to the XDR stream handle being created. The routine `xdrrec_create` fills in `xdrs` with encoding and decoding information.

> ### sendsize

> The send buffer size.

> ### recvsize

> The receive buffer size.

> ### tcp_handle

> A pointer to an opaque handle that is passed as the first parameter to the procedures (*readit)() and (*writeit)().

> ### (*readit)()

> Read procedure that takes the opaque handle `tcp_handle` . The routine must use the following format:

>     int readit(char *tcp_handle, char *buffer, u_long len)

> where tcp_handle is the client or server handle, buffer is the buffer to fill, and len is the number of bytes to read. The `readit` routine should return either the number of bytes read or the value `-1` if an error occurs.

> ### (*writeit)()

> Write procedure that takes the opaque handle `tcp_handle` . The routine must use the following format:

>     int writeit(char *tcp_handle, char *buffer, u_long len)

> where tcp_handle is the client or server handle, buffer is the buffer to write, and len is the number of bytes to write. The `readit` routine should return either the number of bytes written or the value `-1` if an error occurs.

## Description

> The stream descriptor for `xdrs` initializes the maximum allowable size for a request `recvsize` and reply `sendsize` , the addresses of the routine to perform the read `(readit)` and write `(writeit)` , and the TCP handle used for network I/O.

## Return Values

> None |

# xdrrec_endofrecord

> Generates an end-of-record for an XDR record.

## Format

> #include <tcpip$rpcxdr.h>

> bool_t xdrrec_endofrecord (XDR *xdrs, bool_t sendnow);

## Arguments

> ### xdrs

> A pointer to an XDR stream handle created by one of the XDR stream-handle creation routines.

> ### sendnow

> Indicates whether the record should be sent. If sendnow is TRUE, `xdrrec_endofrecord` sends the record by calling the `writeit` routine specified in the call to `xdrrec_create` . If sendnow is FALSE, `xdrrec_endofrecord` marks the end of the record and calls `writeit` when the buffer is full.

## Description

> This routine lets an application support batch calls and pipelined procedure calls.

## Return Values

> TRUE | Indicates success.
> FALSE | Indicates failure.

# xdrrec_eof

> Moves the buffer pointer to the end of the current record and returns an indication if any more data exists in the buffer.

## Format

> #include <tcpip$rpcxdr.h>

> bool_t xdrrec_eof (XDR *xdrs);

## Arguments

> ### xdrs

> A pointer to an XDR stream handle created by one of the XDR stream-handle creation routines.

## Description

> Returns TRUE if there is no more input in the buffer after consuming the rest of the current record.

## Return Values

> TRUE | Indicates no more input in the buffer.
> FALSE | Indicates more input in the buffer.

# xdrrec_skiprecord

> Guarantees proper record alignment during deserialization from an incoming stream.

## Format

> #include <tcpip$rpcxdr.h>

> bool_t xdrrec_skiprecord (XDR *xdrs);

## Arguments

> ### xdrs

> A pointer to an XDR stream handle created by one of the XDR stream-handle creation routines.

## Description

> This routine ensures that the stream is properly aligned in preparation for a subsequent read. It is recommended that, when a record stream is being used, this routine be called prior to any operations that would read from the stream.

> This routine is similar to the `xdrrec_eof` routine, except that this routine does not verify whether there is more data in the buffer.

## Return Values

> TRUE | Indicates success.
> FALSE | Indicates failure.

# xdrstdio_create

> Initializes an `stdio` XDR stream.

## Format

> #include <tcpip$rpcxdr.h>

> void xdrstdio_create (XDR *xdrs, FILE *file, enum xdr_op op);

## Arguments

> ### xdrs

> A pointer to the XDR stream handle being created. The routine `xdrstdio_create` fills in `xdrs` with encoding and decoding information..

> ### file

> A pointer to the `FILE` structure that is to be associated with the stream.

> ### op

> An XDR operation, one of: `XDR_ENCODE` , `XDR_DECODE` , and `XDR_FREE` .

## Description

> Initializes a `stdio` stream for the specified file.

## Return Values

> None |

Index | Contents