Home | History | Annotate | Download | only in rpc
      1 /* @(#)rpc_msg.h	2.1 88/07/29 4.0 RPCSRC */
      2 /*
      3  * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
      4  * unrestricted use provided that this legend is included on all tape
      5  * media and as a part of the software program in whole or part.  Users
      6  * may copy or modify Sun RPC without charge, but are not authorized
      7  * to license or distribute it to anyone else except as part of a product or
      8  * program developed by the user.
      9  *
     10  * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
     11  * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
     12  * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
     13  *
     14  * Sun RPC is provided with no support and without any obligation on the
     15  * part of Sun Microsystems, Inc. to assist in its use, correction,
     16  * modification or enhancement.
     17  *
     18  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
     19  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
     20  * OR ANY PART THEREOF.
     21  *
     22  * In no event will Sun Microsystems, Inc. be liable for any lost revenue
     23  * or profits or other special, indirect and consequential damages, even if
     24  * Sun has been advised of the possibility of such damages.
     25  *
     26  * Sun Microsystems, Inc.
     27  * 2550 Garcia Avenue
     28  * Mountain View, California  94043
     29  */
     30 /*      @(#)rpc_msg.h 1.7 86/07/16 SMI      */
     31 
     32 #ifndef _RPC_MSG_H
     33 #define _RPC_MSG_H 1
     34 
     35 #include <sys/cdefs.h>
     36 
     37 #include <rpc/xdr.h>
     38 #include <rpc/clnt.h>
     39 
     40 /*
     41  * rpc_msg.h
     42  * rpc message definition
     43  *
     44  * Copyright (C) 1984, Sun Microsystems, Inc.
     45  */
     46 
     47 #define RPC_MSG_VERSION		((u_long) 2)
     48 #define RPC_SERVICE_PORT	((u_short) 2048)
     49 
     50 __BEGIN_DECLS
     51 
     52 /*
     53  * Bottom up definition of an rpc message.
     54  * NOTE: call and reply use the same overall struct but
     55  * different parts of unions within it.
     56  */
     57 
     58 enum msg_type {
     59 	CALL=0,
     60 	REPLY=1
     61 };
     62 
     63 enum reply_stat {
     64 	MSG_ACCEPTED=0,
     65 	MSG_DENIED=1
     66 };
     67 
     68 enum accept_stat {
     69 	SUCCESS=0,
     70 	PROG_UNAVAIL=1,
     71 	PROG_MISMATCH=2,
     72 	PROC_UNAVAIL=3,
     73 	GARBAGE_ARGS=4,
     74 	SYSTEM_ERR=5
     75 };
     76 
     77 enum reject_stat {
     78 	RPC_MISMATCH=0,
     79 	AUTH_ERROR=1
     80 };
     81 
     82 /*
     83  * Reply part of an rpc exchange
     84  */
     85 
     86 /*
     87  * Reply to an rpc request that was accepted by the server.
     88  * Note: there could be an error even though the request was
     89  * accepted.
     90  */
     91 struct accepted_reply {
     92 	struct opaque_auth	ar_verf;
     93 	enum accept_stat	ar_stat;
     94 	union {
     95 		struct {
     96 			u_long	low;
     97 			u_long	high;
     98 		} AR_versions;
     99 		struct {
    100 			caddr_t	where;
    101 			xdrproc_t proc;
    102 		} AR_results;
    103 		/* and many other null cases */
    104 	} ru;
    105 #define	ar_results	ru.AR_results
    106 #define	ar_vers		ru.AR_versions
    107 };
    108 
    109 /*
    110  * Reply to an rpc request that was rejected by the server.
    111  */
    112 struct rejected_reply {
    113 	enum reject_stat rj_stat;
    114 	union {
    115 		struct {
    116 			u_long low;
    117 			u_long high;
    118 		} RJ_versions;
    119 		enum auth_stat RJ_why;  /* why authentication did not work */
    120 	} ru;
    121 #define	rj_vers	ru.RJ_versions
    122 #define	rj_why	ru.RJ_why
    123 };
    124 
    125 /*
    126  * Body of a reply to an rpc request.
    127  */
    128 struct reply_body {
    129 	enum reply_stat rp_stat;
    130 	union {
    131 		struct accepted_reply RP_ar;
    132 		struct rejected_reply RP_dr;
    133 	} ru;
    134 #define	rp_acpt	ru.RP_ar
    135 #define	rp_rjct	ru.RP_dr
    136 };
    137 
    138 /*
    139  * Body of an rpc request call.
    140  */
    141 struct call_body {
    142 	u_long cb_rpcvers;	/* must be equal to two */
    143 	u_long cb_prog;
    144 	u_long cb_vers;
    145 	u_long cb_proc;
    146 	struct opaque_auth cb_cred;
    147 	struct opaque_auth cb_verf; /* protocol specific - provided by client */
    148 };
    149 
    150 /*
    151  * The rpc message
    152  */
    153 struct rpc_msg {
    154 	u_long			rm_xid;
    155 	enum msg_type		rm_direction;
    156 	union {
    157 		struct call_body RM_cmb;
    158 		struct reply_body RM_rmb;
    159 	} ru;
    160 #define	rm_call		ru.RM_cmb
    161 #define	rm_reply	ru.RM_rmb
    162 };
    163 #define	acpted_rply	ru.RM_rmb.ru.RP_ar
    164 #define	rjcted_rply	ru.RM_rmb.ru.RP_dr
    165 
    166 
    167 /*
    168  * XDR routine to handle a rpc message.
    169  * xdr_callmsg(xdrs, cmsg)
    170  * 	XDR *xdrs;
    171  * 	struct rpc_msg *cmsg;
    172  */
    173 extern bool_t	xdr_callmsg (XDR *__xdrs, struct rpc_msg *__cmsg) __THROW;
    174 
    175 /*
    176  * XDR routine to pre-serialize the static part of a rpc message.
    177  * xdr_callhdr(xdrs, cmsg)
    178  * 	XDR *xdrs;
    179  * 	struct rpc_msg *cmsg;
    180  */
    181 extern bool_t	xdr_callhdr (XDR *__xdrs, struct rpc_msg *__cmsg) __THROW;
    182 
    183 /*
    184  * XDR routine to handle a rpc reply.
    185  * xdr_replymsg(xdrs, rmsg)
    186  * 	XDR *xdrs;
    187  * 	struct rpc_msg *rmsg;
    188  */
    189 extern bool_t	xdr_replymsg (XDR *__xdrs, struct rpc_msg *__rmsg) __THROW;
    190 
    191 /*
    192  * Fills in the error part of a reply message.
    193  * _seterr_reply(msg, error)
    194  * 	struct rpc_msg *msg;
    195  * 	struct rpc_err *error;
    196  */
    197 extern void	_seterr_reply (struct rpc_msg *__msg, struct rpc_err *__error)
    198      __THROW;
    199 
    200 __END_DECLS
    201 
    202 #endif /* rpc/rpc_msg.h */
    203