# Module Rpc_packer

    module Rpc_packer: sig .. end

Packing and Unpacking of messages; can be used by both client and server programs. RPC messages consists of a frame and of application data. The packing (and unpacking) of the latter into the frame is done by this module. The frame is an XDR value with some slots that can be filled with application data, normally again an XDR value. The slots are represented using the `X_param` mechanism provided by the XDR module. As nested X_param usage is not permitted, this feature is not available for application data.

    type packed_value

    val pack_call : ?encoder:Netxdr.encoder ->
           Rpc_program.t ->
           Netnumber.uint4 ->
           string ->
           string ->
           string -> string -> string -> Netxdr.xdr_value -> packed_value

Packs the call and returns a `packed_value` that wraps the message string

    val pack_call_pseudo : Rpc_program.t ->
           Netnumber.uint4 ->
           string ->
           string ->
           string -> string -> string -> Netxdr.xdr_value -> packed_value

Packs the call and returns a `packed_value` that contains the arguments as they are (i.e. not encoded as string).

    val pack_call_gssapi_header : Rpc_program.t ->
           Netnumber.uint4 -> string -> string -> string -> packed_value

for GSS-API - packs the call header up to the credentials

    val unpack_call : ?mstring_factories:Netxdr_mstring.named_mstring_factories ->
           ?decoder:Netxdr.decoder ->
           Rpc_program.t ->
           string ->
           packed_value ->
           Netnumber.uint4 * Netnumber.uint4 * Netnumber.uint4 * Netnumber.uint4 *
           string * string * string * string * Netxdr.xdr_value

Unpacks the call completely

    val unpack_call_frame : packed_value ->
           Netnumber.uint4 * Netnumber.uint4 * Netnumber.uint4 * Netnumber.uint4 *
           string * string * string * string

Unpacks only the frame of the call.

    val unpack_call_frame_l : packed_value ->
           Netnumber.uint4 * Netnumber.uint4 * Netnumber.uint4 * Netnumber.uint4 *
           string * string * string * string * int

Unpacks only the frame of the call, returns also the length of the frame

    val extract_call_gssapi_header : packed_value -> int

returns the length of the prefix of the message so that the prefix includes the header until (and including) the credentials.

This function is unavailable for values packed with any of the `pack_*_pseudo` functions.

    val unpack_call_body : ?mstring_factories:Netxdr_mstring.named_mstring_factories ->
           ?decoder:Netxdr.decoder ->
           Rpc_program.t -> string -> packed_value -> int -> Netxdr.xdr_value

Unpacks only the body (the parameters of the procedure call) of the `packed_value`. You can pass the length of the call frame as the position of the body.

This works also for values packed with `pack_*_pseudo`, and the position is ignored in this case.

    val unpack_call_body_raw : packed_value -> int -> string

    val unpack_call_body_raw_bytes : packed_value -> int -> Stdlib.Bytes.t

A successful reply means that the procedure call returned a value. An accepting reply means that authentication was successful but the procedure could not be evaluated. The third catagory of replies are rejecting replies.

    val pack_successful_reply : ?encoder:Netxdr.encoder ->
           Rpc_program.t ->
           string ->
           Netnumber.uint4 ->
           string -> string -> Netxdr.xdr_value -> packed_value

Packs a successful reply

    val pack_successful_reply_pseudo : Rpc_program.t ->
           string ->
           Netnumber.uint4 ->
           string -> string -> Netxdr.xdr_value -> packed_value

Packs a successful reply as pseudo message

    val pack_successful_reply_raw : Netnumber.uint4 ->
           string -> string -> Netxdr_mstring.mstring list -> packed_value

    val pack_accepting_reply : Netnumber.uint4 ->
           string -> string -> Rpc.server_error -> packed_value

Packs a server error that counts as accepting call

    val pack_accepting_reply_pseudo : Netnumber.uint4 ->
           string -> string -> Rpc.server_error -> packed_value

Same, but returns a pseudo message

    val pack_rejecting_reply : Netnumber.uint4 -> Rpc.server_error -> packed_value

Packs a server error that counts as rejecting call

    val pack_rejecting_reply_pseudo : Netnumber.uint4 -> Rpc.server_error -> packed_value

Same, but returns a pseudo message

    val unpack_reply : ?mstring_factories:Netxdr_mstring.named_mstring_factories ->
           ?decoder:Netxdr.decoder ->
           Rpc_program.t ->
           string ->
           packed_value ->
           Netnumber.uint4 * string * string * Netxdr.xdr_value

`unpack_reply` may raise:

- `Rpc_server`: If one of the server error conditions is true. Note that the call may be "accepted" even if this exception occurs. In this case use `unpack_reply_verfifier` to get the verifier.

    val unpack_reply_verifier : Rpc_program.t -> string -> packed_value -> string * string

    val peek_xid : packed_value -> Netnumber.uint4

Extracts the session ID without analyzing the rest of the message.

    val peek_auth_error : packed_value -> Rpc.server_error option

If an authentication error occurs, this function extracts it from the packed message.

    val length_of_packed_value : packed_value -> int

    val string_of_packed_value : packed_value -> string

    val bytes_of_packed_value : packed_value -> Stdlib.Bytes.t

    val mstrings_of_packed_value : packed_value -> Netxdr_mstring.mstring list

Get the packed string. These functions cannot be used for values returned from any of the `pack_*_pseudo` functions.

    val packed_value_of_string : string -> packed_value

    val packed_value_of_bytes : Stdlib.Bytes.t -> packed_value

    val packed_value_of_mstrings : Netxdr_mstring.mstring list -> packed_value

    val prefix_of_packed_value : packed_value -> int -> string

The first n bytes of the packed value

    val xdr_of_pseudo_value : packed_value -> Netxdr.xdr_value

    val pseudo_value_of_xdr : Netxdr.xdr_value -> packed_value