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