home *** CD-ROM | disk | FTP | other *** search
/ Serving the Web / ServingTheWeb1995.disc1of1.iso / linux / slacksrce / d / libc / libc-4.6 / libc-4 / libc-linux / rpc / svc_raw.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-10-02  |  4.1 KB  |  170 lines

  1. /* @(#)svc_raw.c    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. #if !defined(lint) && defined(SCCSIDS)
  31. static char sccsid[] = "@(#)svc_raw.c 1.15 87/08/11 Copyr 1984 Sun Micro";
  32. #endif
  33.  
  34. /*
  35.  * svc_raw.c,   This a toy for simple testing and timing.
  36.  * Interface to create an rpc client and server in the same UNIX process.
  37.  * This lets us similate rpc and get rpc (round trip) overhead, without
  38.  * any interference from the kernal.
  39.  *
  40.  * Copyright (C) 1984, Sun Microsystems, Inc.
  41.  */
  42.  
  43. #include <rpc/rpc.h>
  44.  
  45. #ifdef __STDC__
  46. #include <stdlib.h>
  47. #endif
  48.  
  49. /*
  50.  * This is the "network" that we will be moving data over
  51.  */
  52. static struct svcraw_private {
  53.     char    _raw_buf[UDPMSGSIZE];
  54.     SVCXPRT    server;
  55.     XDR    xdr_stream;
  56.     char    verf_body[MAX_AUTH_BYTES];
  57. } *svcraw_private;
  58.  
  59. static bool_t        svcraw_recv();
  60. static enum xprt_stat     svcraw_stat();
  61. static bool_t        svcraw_getargs();
  62. static bool_t        svcraw_reply();
  63. static bool_t        svcraw_freeargs();
  64. static void        svcraw_destroy();
  65.  
  66. static struct xp_ops server_ops = {
  67.     svcraw_recv,
  68.     svcraw_stat,
  69.     svcraw_getargs,
  70.     svcraw_reply,
  71.     svcraw_freeargs,
  72.     svcraw_destroy
  73. };
  74.  
  75. SVCXPRT *
  76. svcraw_create()
  77. {
  78.     register struct svcraw_private *srp = svcraw_private;
  79.  
  80.     if (srp == 0) {
  81.         srp = (struct svcraw_private *)calloc(1, sizeof (*srp));
  82.         if (srp == 0)
  83.             return (0);
  84.     }
  85.     srp->server.xp_sock = 0;
  86.     srp->server.xp_port = 0;
  87.     srp->server.xp_ops = &server_ops;
  88.     srp->server.xp_verf.oa_base = srp->verf_body;
  89.     xdrmem_create(&srp->xdr_stream, srp->_raw_buf, UDPMSGSIZE, XDR_FREE);
  90.     return (&srp->server);
  91. }
  92.  
  93. static enum xprt_stat
  94. svcraw_stat()
  95. {
  96.  
  97.     return (XPRT_IDLE);
  98. }
  99.  
  100. static bool_t
  101. svcraw_recv(xprt, msg)
  102.     SVCXPRT *xprt;
  103.     struct rpc_msg *msg;
  104. {
  105.     register struct svcraw_private *srp = svcraw_private;
  106.     register XDR *xdrs;
  107.  
  108.     if (srp == 0)
  109.         return (0);
  110.     xdrs = &srp->xdr_stream;
  111.     xdrs->x_op = XDR_DECODE;
  112.     XDR_SETPOS(xdrs, 0);
  113.     if (! xdr_callmsg(xdrs, msg))
  114.            return (FALSE);
  115.     return (TRUE);
  116. }
  117.  
  118. static bool_t
  119. svcraw_reply(xprt, msg)
  120.     SVCXPRT *xprt;
  121.     struct rpc_msg *msg;
  122. {
  123.     register struct svcraw_private *srp = svcraw_private;
  124.     register XDR *xdrs;
  125.  
  126.     if (srp == 0)
  127.         return (FALSE);
  128.     xdrs = &srp->xdr_stream;
  129.     xdrs->x_op = XDR_ENCODE;
  130.     XDR_SETPOS(xdrs, 0);
  131.     if (! xdr_replymsg(xdrs, msg))
  132.            return (FALSE);
  133.     (void)XDR_GETPOS(xdrs);  /* called just for overhead */
  134.     return (TRUE);
  135. }
  136.  
  137. static bool_t
  138. svcraw_getargs(xprt, xdr_args, args_ptr)
  139.     SVCXPRT *xprt;
  140.     xdrproc_t xdr_args;
  141.     caddr_t args_ptr;
  142. {
  143.     register struct svcraw_private *srp = svcraw_private;
  144.  
  145.     if (srp == 0)
  146.         return (FALSE);
  147.     return ((*xdr_args)(&srp->xdr_stream, args_ptr));
  148. }
  149.  
  150. static bool_t
  151. svcraw_freeargs(xprt, xdr_args, args_ptr)
  152.     SVCXPRT *xprt;
  153.     xdrproc_t xdr_args;
  154.     caddr_t args_ptr;
  155.     register struct svcraw_private *srp = svcraw_private;
  156.     register XDR *xdrs;
  157.  
  158.     if (srp == 0)
  159.         return (FALSE);
  160.     xdrs = &srp->xdr_stream;
  161.     xdrs->x_op = XDR_FREE;
  162.     return ((*xdr_args)(xdrs, args_ptr));
  163.  
  164. static void
  165. svcraw_destroy()
  166. {
  167. }
  168.