Spaces:
Sleeping
Sleeping
/* @(#)rpc_msg.h 2.1 88/07/29 4.0 RPCSRC */ | |
/* | |
* Copyright (c) 2010, Oracle America, Inc. | |
* | |
* All rights reserved. | |
* | |
* Redistribution and use in source and binary forms, with or without | |
* modification, are permitted provided that the following conditions are met: | |
* | |
* * Redistributions of source code must retain the above copyright | |
* notice, this list of conditions and the following disclaimer. | |
* | |
* * Redistributions in binary form must reproduce the above copyright | |
* notice, this list of conditions and the following disclaimer in | |
* the documentation and/or other materials provided with the | |
* distribution. | |
* | |
* * Neither the name of the "Oracle America, Inc." nor the names of | |
* its contributors may be used to endorse or promote products | |
* derived from this software without specific prior written permission. | |
* | |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS | |
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED | |
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A | |
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |
* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED | |
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | |
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | |
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | |
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | |
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
*/ | |
/* @(#)rpc_msg.h 1.7 86/07/16 SMI */ | |
/* | |
* rpc_msg.h | |
* rpc message definition | |
*/ | |
GSSRPC__BEGIN_DECLS | |
/* | |
* Bottom up definition of an rpc message. | |
* NOTE: call and reply use the same overall struct but | |
* different parts of unions within it. | |
*/ | |
enum msg_type { | |
CALL=0, | |
REPLY=1 | |
}; | |
enum reply_stat { | |
MSG_ACCEPTED=0, | |
MSG_DENIED=1 | |
}; | |
enum accept_stat { | |
SUCCESS=0, | |
PROG_UNAVAIL=1, | |
PROG_MISMATCH=2, | |
PROC_UNAVAIL=3, | |
GARBAGE_ARGS=4, | |
SYSTEM_ERR=5 | |
}; | |
enum reject_stat { | |
RPC_MISMATCH=0, | |
AUTH_ERROR=1 | |
}; | |
/* | |
* Reply part of an rpc exchange | |
*/ | |
/* | |
* Reply to an rpc request that was accepted by the server. | |
* Note: there could be an error even though the request was | |
* accepted. | |
*/ | |
struct accepted_reply { | |
struct opaque_auth ar_verf; | |
enum accept_stat ar_stat; | |
union { | |
struct { | |
rpcvers_t low; | |
rpcvers_t high; | |
} AR_versions; | |
struct { | |
caddr_t where; | |
xdrproc_t proc; | |
} AR_results; | |
/* and many other null cases */ | |
} ru; | |
}; | |
/* | |
* Reply to an rpc request that was rejected by the server. | |
*/ | |
struct rejected_reply { | |
enum reject_stat rj_stat; | |
union { | |
struct { | |
rpcvers_t low; | |
rpcvers_t high; | |
} RJ_versions; | |
enum auth_stat RJ_why; /* why authentication did not work */ | |
} ru; | |
}; | |
/* | |
* Body of a reply to an rpc request. | |
*/ | |
struct reply_body { | |
enum reply_stat rp_stat; | |
union { | |
struct accepted_reply RP_ar; | |
struct rejected_reply RP_dr; | |
} ru; | |
}; | |
/* | |
* Body of an rpc request call. | |
*/ | |
struct call_body { | |
rpcvers_t cb_rpcvers; /* must be equal to two */ | |
rpcprog_t cb_prog; | |
rpcvers_t cb_vers; | |
rpcproc_t cb_proc; | |
struct opaque_auth cb_cred; | |
struct opaque_auth cb_verf; /* protocol specific - provided by client */ | |
}; | |
/* | |
* The rpc message | |
*/ | |
struct rpc_msg { | |
uint32_t rm_xid; | |
enum msg_type rm_direction; | |
union { | |
struct call_body RM_cmb; | |
struct reply_body RM_rmb; | |
} ru; | |
}; | |
/* | |
* XDR routine to handle a rpc message. | |
* xdr_callmsg(xdrs, cmsg) | |
* XDR *xdrs; | |
* struct rpc_msg *cmsg; | |
*/ | |
extern bool_t xdr_callmsg(XDR *, struct rpc_msg *); | |
/* | |
* XDR routine to pre-serialize the static part of a rpc message. | |
* xdr_callhdr(xdrs, cmsg) | |
* XDR *xdrs; | |
* struct rpc_msg *cmsg; | |
*/ | |
extern bool_t xdr_callhdr(XDR *, struct rpc_msg *); | |
/* | |
* XDR routine to handle a rpc reply. | |
* xdr_replymsg(xdrs, rmsg) | |
* XDR *xdrs; | |
* struct rpc_msg *rmsg; | |
*/ | |
extern bool_t xdr_replymsg(XDR *, struct rpc_msg *); | |
/* | |
* Fills in the error part of a reply message. | |
* _seterr_reply(msg, error) | |
* struct rpc_msg *msg; | |
* struct rpc_err *error; | |
*/ | |
/* | |
* RENAMED: should be _seterr_reply or __seterr_reply if we can use | |
* reserved namespace. | |
*/ | |
extern void gssrpc__seterr_reply(struct rpc_msg *, struct rpc_err *); | |
/* XDR the MSG_ACCEPTED part of a reply message union */ | |
extern bool_t xdr_accepted_reply(XDR *, struct accepted_reply *); | |
/* XDR the MSG_DENIED part of a reply message union */ | |
extern bool_t xdr_rejected_reply(XDR *, struct rejected_reply *); | |
GSSRPC__END_DECLS | |