home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 3 / goldfish_volume_3.bin / files / comm / tcp / amitcp-sdk / src / rpclib / svc_raw.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-09-29  |  3.2 KB  |  140 lines

  1. /*
  2.  *      $Id: svc_raw.c,v 4.2 1994/09/29 23:48:50 jraja Exp $
  3.  *
  4.  *      A toy for simple testing and timing. Interface to create an rpc client
  5.  *      and server in the same UNIX process. This lets us similate rpc and get
  6.  *      rpc (round trip) overhead, without any interference from the kernal.
  7.  *
  8.  *      Copyright © 1994 AmiTCP/IP Group,
  9.  *                       Network Solutions Development Inc.
  10.  *                       All rights reserved. 
  11.  */
  12.  
  13. /* @(#)svc_raw.c    2.1 88/07/29 4.0 RPCSRC */
  14. #if !defined(lint) && defined(SCCSIDS)
  15. static char sccsid[] = "@(#)svc_raw.c 1.15 87/08/11 Copyr 1984 Sun Micro";
  16. #endif
  17.  
  18. /*
  19.  * Copyright (C) 1984, Sun Microsystems, Inc.
  20.  */
  21.  
  22. #include <sys/param.h>
  23. #include <rpc/rpc.h>
  24.  
  25.  
  26. /*
  27.  * This is the "network" that we will be moving data over
  28.  */
  29. static struct svcraw_private {
  30.     char    _raw_buf[UDPMSGSIZE];
  31.     SVCXPRT    server;
  32.     XDR    xdr_stream;
  33.     char    verf_body[MAX_AUTH_BYTES];
  34. } *svcraw_private;
  35.  
  36. static bool_t        svcraw_recv(SVCXPRT *, struct rpc_msg *);
  37. static enum xprt_stat     svcraw_stat(SVCXPRT *);
  38. static bool_t        svcraw_getargs(SVCXPRT *xprt, xdrproc_t xargs, 
  39.                        void * argsp);
  40. static bool_t        svcraw_reply(SVCXPRT *xprt,
  41.                      struct rpc_msg *msg);
  42. static bool_t        svcraw_freeargs(SVCXPRT *xprt, xdrproc_t xargs, 
  43.                         void * argsp);
  44. static void        svcraw_destroy(SVCXPRT *xprt);
  45.  
  46. static struct xp_ops server_ops = {
  47.     svcraw_recv,
  48.     svcraw_stat,
  49.     svcraw_getargs,
  50.     svcraw_reply,
  51.     svcraw_freeargs,
  52.     svcraw_destroy
  53. };
  54.  
  55. SVCXPRT *
  56. svcraw_create(void)
  57. {
  58.     register struct svcraw_private *srp = svcraw_private;
  59.  
  60.     if (srp == 0) {
  61.         srp = (struct svcraw_private *)mem_calloc(1, sizeof (*srp));
  62.         if (srp == 0)
  63.             return (0);
  64.     }
  65.     srp->server.xp_sock = 0;
  66.     srp->server.xp_port = 0;
  67.     srp->server.xp_ops = &server_ops;
  68.     srp->server.xp_verf.oa_base = srp->verf_body;
  69.     xdrmem_create(&srp->xdr_stream, srp->_raw_buf, UDPMSGSIZE, XDR_FREE);
  70.     return (&srp->server);
  71. }
  72.  
  73. static enum xprt_stat
  74. svcraw_stat(SVCXPRT *xprt)
  75. {
  76.  
  77.     return (XPRT_IDLE);
  78. }
  79.  
  80. static bool_t
  81. svcraw_recv(SVCXPRT *xprt, struct rpc_msg *msg)
  82. {
  83.     register struct svcraw_private *srp = svcraw_private;
  84.     register XDR *xdrs;
  85.  
  86.     if (srp == 0)
  87.         return (0);
  88.     xdrs = &srp->xdr_stream;
  89.     xdrs->x_op = XDR_DECODE;
  90.     XDR_SETPOS(xdrs, 0);
  91.     if (! xdr_callmsg(xdrs, msg))
  92.            return (FALSE);
  93.     return (TRUE);
  94. }
  95.  
  96. static bool_t
  97. svcraw_reply(SVCXPRT *xprt, struct rpc_msg *msg)
  98. {
  99.     register struct svcraw_private *srp = svcraw_private;
  100.     register XDR *xdrs;
  101.  
  102.     if (srp == 0)
  103.         return (FALSE);
  104.     xdrs = &srp->xdr_stream;
  105.     xdrs->x_op = XDR_ENCODE;
  106.     XDR_SETPOS(xdrs, 0);
  107.     if (! xdr_replymsg(xdrs, msg))
  108.            return (FALSE);
  109.     (void)XDR_GETPOS(xdrs);  /* called just for overhead */
  110.     return (TRUE);
  111. }
  112.  
  113. static bool_t
  114. svcraw_getargs(SVCXPRT *xprt, xdrproc_t xdr_args, void * args_ptr)
  115. {
  116.     register struct svcraw_private *srp = svcraw_private;
  117.  
  118.     if (srp == 0)
  119.         return (FALSE);
  120.     return ((*xdr_args)(&srp->xdr_stream, args_ptr));
  121. }
  122.  
  123. static bool_t
  124. svcraw_freeargs(SVCXPRT *xprt, xdrproc_t xdr_args, void * args_ptr)
  125.     register struct svcraw_private *srp = svcraw_private;
  126.     register XDR *xdrs;
  127.  
  128.     if (srp == 0)
  129.         return (FALSE);
  130.     xdrs = &srp->xdr_stream;
  131.     xdrs->x_op = XDR_FREE;
  132.     return ((*xdr_args)(xdrs, args_ptr));
  133.  
  134. static void
  135. svcraw_destroy(SVCXPRT *xprt)
  136. {
  137. }
  138.