(* $Id: rpc_packer.mli 1553 2011-02-28 00:12:27Z gerd $ * ---------------------------------------------------------------------- * *) (* 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. *) (* CHANGE: * - rpc-0.4: unpacking returns XV_enum_fast, XV_struct_fast, and * XV_union_over_enum_fast values *) open Rtypes open Xdr open Rpc type packed_value (* General packing and unpacking of messages: *) val pack_call : ?encoder:encoder -> Rpc_program.t -> (* which program *) uint4 -> (* session number "xid" *) string -> (* procedure name *) string -> (* flavour of credentials (authentication method) *) string -> (* data of credentials *) string -> (* flavour of verifier *) string -> (* data of verifier *) xdr_value -> (* the parameter of the procedure call *) packed_value (* the call in XDR representation *) val pack_call_gssapi_header : Rpc_program.t -> (* which program *) uint4 -> (* session number "xid" *) string -> (* procedure name *) string -> (* flavour of credentials (authentication method) *) string -> (* data of credentials *) packed_value (* for GSS-API - the call header up to the credentials *) val unpack_call : ?mstring_factories:Xdr_mstring.named_mstring_factories -> ?decoder:decoder -> Rpc_program.t -> (* which program to match *) string -> (* which procedure *) packed_value -> (* the call in XDR representation *) ( uint4 * (* session number "xid" *) uint4 * (* program number *) uint4 * (* version number *) uint4 * (* procedure number *) string * (* flavour of credentials *) string * (* data of credentials *) string * (* flavour of verifier *) string * (* data of verifier *) xdr_value ) (* the parameter of the procdedure call *) (* unpack_call may raise exception Rpc_cannot_unpack. *) (* Note: the program and version numbers given with the Rpc_program.t * parameter are ignored; the values found in the message are returned *) val unpack_call_frame : packed_value -> ( uint4 * (* session number "xid" *) uint4 * (* program number *) uint4 * (* version number *) uint4 * (* procedure number *) string * (* flavour of credentials *) string * (* data of credentials *) string * (* flavour of verifier *) string) (* data of verifier *) (* Unpacks only the frame of the call. *) val unpack_call_frame_l : packed_value -> ( uint4 * (* session number "xid" *) uint4 * (* program number *) uint4 * (* version number *) uint4 * (* procedure number *) string * (* flavour of credentials *) string * (* data of credentials *) string * (* flavour of verifier *) string * (* data of verifier *) int) (* length of the frame in bytes *) (* 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 *) val unpack_call_body : ?mstring_factories:Xdr_mstring.named_mstring_factories -> ?decoder:decoder -> Rpc_program.t -> (* which program to match *) string -> (* which procedure *) packed_value -> (* the (complete) call in XDR representation *) int -> (* the position in the packed_value where the body begins *) xdr_value (* the parameter of the procdedure call *) (* 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. *) val unpack_call_body_raw : packed_value -> int -> string (* More specific messages: *) (* 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:encoder -> Rpc_program.t -> (* which program *) string -> (* which procedure *) uint4 -> (* xid *) string -> (* flavour of verifier *) string -> (* data of verifier *) xdr_value -> (* the return value *) packed_value (* the reply in XDR representation *) val pack_successful_reply_raw : uint4 -> (* xid *) string -> (* flavour of verifier *) string -> (* data of verifier *) Xdr_mstring.mstring list -> (* raw return data *) packed_value val pack_accepting_reply : uint4 -> (* xid *) string -> (* flavour of the verifier *) string -> (* data of verifier *) server_error -> (* one of the possible error conditions *) packed_value (* the reply in XDR representation *) val pack_rejecting_reply : (* Rpc_program.t -> (* which program *) string -> (* which procedure *) *) uint4 -> (* xid *) server_error -> (* one of the possible error conditions *) packed_value (* the reply in XDR representation *) val unpack_reply : ?mstring_factories:Xdr_mstring.named_mstring_factories -> ?decoder:decoder -> Rpc_program.t -> (* which program *) string -> (* which procedure *) packed_value -> (* the reply in XDR representation *) ( uint4 * (* the xid *) string * (* flavour of the verifier *) string * (* data of the verifier *) xdr_value ) (* the return 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 -> (* which program *) string -> (* which procedure *) packed_value -> (* the reply in XDR representation *) (string * string) (* the verifier (flavour, data) *) val peek_xid : packed_value -> uint4 (* Extracts the session ID without analyzing the rest of the message. *) val peek_auth_error : packed_value -> 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 packed_value_of_string : string -> packed_value val mstrings_of_packed_value : packed_value -> Xdr_mstring.mstring list val packed_value_of_mstrings : Xdr_mstring.mstring list -> packed_value val prefix_of_packed_value : packed_value -> int -> string (** The first n bytes of the packed value *) (* Currently, the packer works internally with the "mstring list" representation, and hence mstrings_of_packed_value is fast. The unpacker still works on strings, so one should use packed_value_of_string to create the packed_value passed to it. *)