rpc_msg.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:5k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* rpc_msg.h - rpc message definition */
  2. /* Copyright 1984-1992 Wind River Systems, Inc. */
  3. /*
  4.  * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
  5.  * unrestricted use provided that this legend is included on all tape
  6.  * media and as a part of the software program in whole or part.  Users
  7.  * may copy or modify Sun RPC without charge, but are not authorized
  8.  * to license or distribute it to anyone else except as part of a product or
  9.  * program developed by the user.
  10.  *
  11.  * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
  12.  * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
  13.  * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
  14.  *
  15.  * Sun RPC is provided with no support and without any obligation on the
  16.  * part of Sun Microsystems, Inc. to assist in its use, correction,
  17.  * modification or enhancement.
  18.  *
  19.  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
  20.  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
  21.  * OR ANY PART THEREOF.
  22.  *
  23.  * In no event will Sun Microsystems, Inc. be liable for any lost revenue
  24.  * or profits or other special, indirect and consequential damages, even if
  25.  * Sun has been advised of the possibility of such damages.
  26.  *
  27.  * Sun Microsystems, Inc.
  28.  * 2550 Garcia Avenue
  29.  * Mountain View, California  94043
  30.  */
  31. /*      @(#)rpc_msg.h 1.1 86/02/03 SMI      */
  32. /*
  33.  * rpc_msg.h
  34.  * rpc message definition
  35.  *
  36.  * Copyright (C) 1984, Sun Microsystems, Inc.
  37.  */
  38. /*
  39. modification history
  40. --------------------
  41. 01h,22sep92,rrr  added support for c++
  42. 01g,26may92,rrr  the tree shuffle
  43. 01f,04oct91,rrr  passed through the ansification filter
  44.   -fixed #else and #endif
  45.   -changed copyright notice
  46. 01e,05mar91,ajm  fixed spelling of #define INCrpc_msgh
  47. 01d,24oct90,shl  commented redundant function declarations.
  48. 01c,05oct90,shl  added ANSI function prototypes.
  49.                  added copyright notice.
  50. 01b,27oct89,hjb  added modification history and #ifndef's to avoid multiple
  51.  inclusion.
  52. */
  53. #ifndef __INCrpc_msgh
  54. #define __INCrpc_msgh
  55. #ifdef __cplusplus
  56. extern "C" {
  57. #endif
  58. #define RPC_MSG_VERSION ((u_long) 2)
  59. #define RPC_SERVICE_PORT ((u_short) 2048)
  60. /*
  61.  * Bottom up definition of an rpc message.
  62.  * NOTE: call and reply use the same overall stuct but
  63.  * different parts of unions within it.
  64.  */
  65. enum msg_type {
  66. CALL=0,
  67. REPLY=1
  68. };
  69. enum reply_stat {
  70. MSG_ACCEPTED=0,
  71. MSG_DENIED=1
  72. };
  73. enum accept_stat {
  74. SUCCESS=0,
  75. PROG_UNAVAIL=1,
  76. PROG_MISMATCH=2,
  77. PROC_UNAVAIL=3,
  78. GARBAGE_ARGS=4,
  79. SYSTEM_ERR=5
  80. };
  81. enum reject_stat {
  82. RPC_MISMATCH=0,
  83. AUTH_ERROR=1
  84. };
  85. /*
  86.  * Reply part of an rpc exchange
  87.  */
  88. /*
  89.  * Reply to an rpc request that was accepted by the server.
  90.  * Note: there could be an error even though the request was
  91.  * accepted.
  92.  */
  93. struct accepted_reply {
  94. struct opaque_auth ar_verf;
  95. enum accept_stat ar_stat;
  96. union {
  97. struct {
  98. u_long low;
  99. u_long high;
  100. } AR_versions;
  101. struct {
  102. caddr_t where;
  103. xdrproc_t proc;
  104. } AR_results;
  105. /* and many other null cases */
  106. } ru;
  107. #define ar_results ru.AR_results
  108. #define ar_vers ru.AR_versions
  109. };
  110. /*
  111.  * Reply to an rpc request that was rejected by the server.
  112.  */
  113. struct rejected_reply {
  114. enum reject_stat rj_stat;
  115. union {
  116. struct {
  117. u_long low;
  118. u_long high;
  119. } RJ_versions;
  120. enum auth_stat RJ_why;  /* why authentication did not work */
  121. } ru;
  122. #define rj_vers ru.RJ_versions
  123. #define rj_why ru.RJ_why
  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.  * Body of an rpc request call.
  139.  */
  140. struct call_body {
  141. u_long cb_rpcvers; /* must be equal to two */
  142. u_long cb_prog;
  143. u_long cb_vers;
  144. u_long cb_proc;
  145. struct opaque_auth cb_cred;
  146. struct opaque_auth cb_verf; /* protocol specific - provided by client */
  147. };
  148. /*
  149.  * The rpc message
  150.  */
  151. struct rpc_msg {
  152. u_long rm_xid;
  153. enum msg_type rm_direction;
  154. union {
  155. struct call_body RM_cmb;
  156. struct reply_body RM_rmb;
  157. } ru;
  158. #define rm_call ru.RM_cmb
  159. #define rm_reply ru.RM_rmb
  160. };
  161. #define acpted_rply ru.RM_rmb.ru.RP_ar
  162. #define rjcted_rply ru.RM_rmb.ru.RP_dr
  163. /*
  164.  * XDR routine to handle a rpc message.
  165.  * xdr_callmsg(xdrs, cmsg)
  166.  *  XDR *xdrs;
  167.  *  struct rpc_msg *cmsg;
  168.  */
  169. /* extern bool_t xdr_callmsg(); */
  170. /*
  171.  * XDR routine to pre-serialize the static part of a rpc message.
  172.  * xdr_callhdr(xdrs, cmsg)
  173.  *  XDR *xdrs;
  174.  *  struct rpc_msg *cmsg;
  175.  */
  176. /* extern bool_t xdr_callhdr(); */
  177. /*
  178.  * XDR routine to handle a rpc reply.
  179.  * xdr_replymsg(xdrs, rmsg)
  180.  *  XDR *xdrs;
  181.  *  struct rpc_msg *rmsg;
  182.  */
  183. /* extern bool_t xdr_replymsg(); */
  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. /* function declarations */
  192. #if defined(__STDC__) || defined(__cplusplus)
  193. extern   bool_t       xdr_callmsg (XDR *xdrs, struct rpc_msg *cmsg);
  194. extern   bool_t       xdr_replymsg (XDR *xdrs, struct rpc_msg *rmsg);
  195. extern   bool_t       xdr_callhdr (XDR *xdrs, struct rpc_msg *cmsg);
  196. extern   void        _seterr_reply (struct rpc_msg *msg, struct rpc_err *error);
  197. #else
  198. extern   bool_t       xdr_callmsg ();
  199. extern   bool_t       xdr_replymsg ();
  200. extern   bool_t       xdr_callhdr ();
  201. extern   void        _seterr_reply ();
  202. #endif /* __STDC__ */
  203. #ifdef __cplusplus
  204. }
  205. #endif
  206. #endif /* __INCrpc_msgh */