123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- #define __FORCE_GLIBC__
- #include <features.h>
- #include <rpc/rpc.h>
- static struct svcraw_private {
- char _raw_buf[UDPMSGSIZE];
- SVCXPRT server;
- XDR xdr_stream;
- char verf_body[MAX_AUTH_BYTES];
- } *svcraw_private;
- static bool_t svcraw_recv();
- static enum xprt_stat svcraw_stat();
- static bool_t svcraw_getargs();
- static bool_t svcraw_reply();
- static bool_t svcraw_freeargs();
- static void svcraw_destroy();
- static struct xp_ops server_ops = {
- svcraw_recv,
- svcraw_stat,
- svcraw_getargs,
- svcraw_reply,
- svcraw_freeargs,
- svcraw_destroy
- };
- SVCXPRT *svcraw_create()
- {
- register struct svcraw_private *srp = svcraw_private;
- if (srp == 0) {
- srp = (struct svcraw_private *) calloc(1, sizeof(*srp));
- if (srp == 0)
- return (0);
- }
- srp->server.xp_sock = 0;
- srp->server.xp_port = 0;
- srp->server.xp_ops = &server_ops;
- srp->server.xp_verf.oa_base = srp->verf_body;
- xdrmem_create(&srp->xdr_stream, srp->_raw_buf, UDPMSGSIZE, XDR_FREE);
- return (&srp->server);
- }
- static enum xprt_stat svcraw_stat()
- {
- return (XPRT_IDLE);
- }
- static bool_t svcraw_recv(xprt, msg)
- SVCXPRT *xprt;
- struct rpc_msg *msg;
- {
- register struct svcraw_private *srp = svcraw_private;
- register XDR *xdrs;
- if (srp == 0)
- return (0);
- xdrs = &srp->xdr_stream;
- xdrs->x_op = XDR_DECODE;
- XDR_SETPOS(xdrs, 0);
- if (!xdr_callmsg(xdrs, msg))
- return (FALSE);
- return (TRUE);
- }
- static bool_t svcraw_reply(xprt, msg)
- SVCXPRT *xprt;
- struct rpc_msg *msg;
- {
- register struct svcraw_private *srp = svcraw_private;
- register XDR *xdrs;
- if (srp == 0)
- return (FALSE);
- xdrs = &srp->xdr_stream;
- xdrs->x_op = XDR_ENCODE;
- XDR_SETPOS(xdrs, 0);
- if (!xdr_replymsg(xdrs, msg))
- return (FALSE);
- (void) XDR_GETPOS(xdrs);
- return (TRUE);
- }
- static bool_t svcraw_getargs(xprt, xdr_args, args_ptr)
- SVCXPRT *xprt;
- xdrproc_t xdr_args;
- caddr_t args_ptr;
- {
- register struct svcraw_private *srp = svcraw_private;
- if (srp == 0)
- return (FALSE);
- return ((*xdr_args) (&srp->xdr_stream, args_ptr));
- }
- static bool_t svcraw_freeargs(xprt, xdr_args, args_ptr)
- SVCXPRT *xprt;
- xdrproc_t xdr_args;
- caddr_t args_ptr;
- {
- register struct svcraw_private *srp = svcraw_private;
- register XDR *xdrs;
- if (srp == 0)
- return (FALSE);
- xdrs = &srp->xdr_stream;
- xdrs->x_op = XDR_FREE;
- return ((*xdr_args) (xdrs, args_ptr));
- }
- static void svcraw_destroy()
- {
- }
|