home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 15 / 15.iso / s / s053 / 8.ddi / usr / include / rpc / rpc_msg.h < prev    next >
Encoding:
C/C++ Source or Header  |  1990-12-08  |  3.9 KB  |  193 lines

  1. /*    Copyright (c) 1990 UNIX System Laboratories, Inc.    */
  2. /*    Copyright (c) 1984, 1986, 1987, 1988, 1989, 1990 AT&T    */
  3. /*      All Rights Reserved      */
  4.  
  5. /*    THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF         */
  6. /*    UNIX System Laboratories, Inc.                         */
  7. /*    The copyright notice above does not evidence any       */
  8. /*    actual or intended publication of such source code.    */
  9.  
  10. #ifndef _RPC_RPCMSG_H
  11. #define _RPC_RPCMSG_H
  12.  
  13. #ident    "@(#)/usr/include/rpc/rpc_msg.h.sl 1.1 4.0 12/08/90 8435 AT&T-USL"
  14.  
  15. /*      @(#)rpc_msg.h 1.11 88/10/25 SMI      */
  16.  
  17. /*
  18.  *          PROPRIETARY NOTICE (Combined)
  19.  *  
  20.  *  This source code is unpublished proprietary information
  21.  *  constituting, or derived under license from AT&T's Unix(r) System V.
  22.  *  In addition, portions of such source code were derived from Berkeley
  23.  *  4.3 BSD under license from the Regents of the University of
  24.  *  California.
  25.  *  
  26.  *  
  27.  *  
  28.  *          Copyright Notice 
  29.  *  
  30.  *  Notice of copyright on this source code product does not indicate 
  31.  *  publication.
  32.  *  
  33.  *      (c) 1986,1987,1988,1989  Sun Microsystems, Inc.
  34.  *      (c) 1983,1984,1985,1986,1987,1988,1989  AT&T.
  35.  *                All rights reserved.
  36.  */
  37.  
  38. /*
  39.  * rpc_msg.h
  40.  * rpc message definition
  41.  */
  42. #define RPC_MSG_VERSION        ((u_long) 2)
  43. #define RPC_SERVICE_PORT    ((u_short) 2048)
  44.  
  45. /*
  46.  * Bottom up definition of an rpc message.
  47.  * NOTE: call and reply use the same overall stuct but
  48.  * different parts of unions within it.
  49.  */
  50.  
  51. enum msg_type {
  52.     CALL=0,
  53.     REPLY=1
  54. };
  55.  
  56. enum reply_stat {
  57.     MSG_ACCEPTED=0,
  58.     MSG_DENIED=1
  59. };
  60.  
  61. enum accept_stat {
  62.     SUCCESS=0,
  63.     PROG_UNAVAIL=1,
  64.     PROG_MISMATCH=2,
  65.     PROC_UNAVAIL=3,
  66.     GARBAGE_ARGS=4,
  67.     SYSTEM_ERR=5
  68. };
  69.  
  70. enum reject_stat {
  71.     RPC_MISMATCH=0,
  72.     AUTH_ERROR=1
  73. };
  74.  
  75. /*
  76.  * Reply part of an rpc exchange
  77.  */
  78.  
  79. /*
  80.  * Reply to an rpc request that was accepted by the server.
  81.  * Note: there could be an error even though the request was
  82.  * accepted.
  83.  */
  84. struct accepted_reply {
  85.     struct opaque_auth    ar_verf;
  86.     enum accept_stat    ar_stat;
  87.     union {
  88.         struct {
  89.             u_long    low;
  90.             u_long    high;
  91.         } AR_versions;
  92.         struct {
  93.             caddr_t    where;
  94.             xdrproc_t proc;
  95.         } AR_results;
  96.         /* and many other null cases */
  97.     } ru;
  98. #define    ar_results    ru.AR_results
  99. #define    ar_vers        ru.AR_versions
  100. };
  101.  
  102. /*
  103.  * Reply to an rpc request that was rejected by the server.
  104.  */
  105. struct rejected_reply {
  106.     enum reject_stat rj_stat;
  107.     union {
  108.         struct {
  109.             u_long low;
  110.             u_long high;
  111.         } RJ_versions;
  112.         enum auth_stat RJ_why;  /* why authentication did not work */
  113.     } ru;
  114. #define    rj_vers    ru.RJ_versions
  115. #define    rj_why    ru.RJ_why
  116. };
  117.  
  118. /*
  119.  * Body of a reply to an rpc request.
  120.  */
  121. struct reply_body {
  122.     enum reply_stat rp_stat;
  123.     union {
  124.         struct accepted_reply RP_ar;
  125.         struct rejected_reply RP_dr;
  126.     } ru;
  127. #define    rp_acpt    ru.RP_ar
  128. #define    rp_rjct    ru.RP_dr
  129. };
  130.  
  131. /*
  132.  * Body of an rpc request call.
  133.  */
  134. struct call_body {
  135.     u_long cb_rpcvers;    /* must be equal to two */
  136.     u_long cb_prog;
  137.     u_long cb_vers;
  138.     u_long cb_proc;
  139.     struct opaque_auth cb_cred;
  140.     struct opaque_auth cb_verf; /* protocol specific - provided by client */
  141. };
  142.  
  143. /*
  144.  * The rpc message
  145.  */
  146. struct rpc_msg {
  147.     u_long            rm_xid;
  148.     enum msg_type        rm_direction;
  149.     union {
  150.         struct call_body RM_cmb;
  151.         struct reply_body RM_rmb;
  152.     } ru;
  153. #define    rm_call        ru.RM_cmb
  154. #define    rm_reply    ru.RM_rmb
  155. };
  156. #define    acpted_rply    ru.RM_rmb.ru.RP_ar
  157. #define    rjcted_rply    ru.RM_rmb.ru.RP_dr
  158.  
  159.  
  160. /*
  161.  * XDR routine to handle a rpc message.
  162.  * xdr_callmsg(xdrs, cmsg)
  163.  *     XDR *xdrs;
  164.  *     struct rpc_msg *cmsg;
  165.  */
  166. extern bool_t    xdr_callmsg();
  167.  
  168. /*
  169.  * XDR routine to pre-serialize the static part of a rpc message.
  170.  * xdr_callhdr(xdrs, cmsg)
  171.  *     XDR *xdrs;
  172.  *     struct rpc_msg *cmsg;
  173.  */
  174. extern bool_t    xdr_callhdr();
  175.  
  176. /*
  177.  * XDR routine to handle a rpc reply.
  178.  * xdr_replymsg(xdrs, rmsg)
  179.  *     XDR *xdrs;
  180.  *     struct rpc_msg *rmsg;
  181.  */
  182. extern bool_t    xdr_replymsg();
  183.  
  184. /*
  185.  * Fills in the error part of a reply message.
  186.  * _seterr_reply(msg, error)
  187.  *     struct rpc_msg *msg;
  188.  *     struct rpc_err *error;
  189.  */
  190. extern void    _seterr_reply();
  191.  
  192. #endif    /* _RPC_RPCMSG_H */
  193.