source: rtems/cpukit/librpc/src/rpc/svc_raw.c @ ce1c8ea

4.104.114.84.95
Last change on this file since ce1c8ea was d16b2d3, checked in by Ralf Corsepius <ralf.corsepius@…>, on 11/27/03 at 09:35:40

2003-11-27 Ralf Corsepius <corsepiu@…>

  • include/rpc/rpc.hinclude/rpc/rpc.h: Rename struct rtems_rpc_task_variables into struct _rtems_rpc_task_variables (Avoid symbol conflict between struct and variable). struct _rtems_rpc_task_variables *rtems_rpc_task_variables; Reflect changes above.
  • src/rpc/clnt_perror.c, src/rpc/clnt_raw.c, src/rpc/clnt_simple.c, src/rpc/rpcdname.c, src/rpc/rtems_rpc.c, src/rpc/svc.c, src/rpc/svc_auth.c, src/rpc/svc_raw.c, src/rpc/svc_simple.c: Reflect changes above.
  • Property mode set to 100644
File size: 4.2 KB
Line 
1/*
2 * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
3 * unrestricted use provided that this legend is included on all tape
4 * media and as a part of the software program in whole or part.  Users
5 * may copy or modify Sun RPC without charge, but are not authorized
6 * to license or distribute it to anyone else except as part of a product or
7 * program developed by the user.
8 *
9 * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
10 * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
11 * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
12 *
13 * Sun RPC is provided with no support and without any obligation on the
14 * part of Sun Microsystems, Inc. to assist in its use, correction,
15 * modification or enhancement.
16 *
17 * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
18 * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
19 * OR ANY PART THEREOF.
20 *
21 * In no event will Sun Microsystems, Inc. be liable for any lost revenue
22 * or profits or other special, indirect and consequential damages, even if
23 * Sun has been advised of the possibility of such damages.
24 *
25 * Sun Microsystems, Inc.
26 * 2550 Garcia Avenue
27 * Mountain View, California  94043
28 */
29
30#if defined(LIBC_SCCS) && !defined(lint)
31/*static char *sccsid = "from: @(#)svc_raw.c 1.15 87/08/11 Copyr 1984 Sun Micro";*/
32/*static char *sccsid = "from: @(#)svc_raw.c    2.1 88/07/29 4.0 RPCSRC";*/
33static char *rcsid = "$FreeBSD: src/lib/libc/rpc/svc_raw.c,v 1.7 1999/08/28 00:00:49 peter Exp $";
34#endif
35
36/*
37 * svc_raw.c,   This a toy for simple testing and timing.
38 * Interface to create an rpc client and server in the same UNIX process.
39 * This lets us similate rpc and get rpc (round trip) overhead, without
40 * any interference from the kernal.
41 *
42 * Copyright (C) 1984, Sun Microsystems, Inc.
43 */
44
45#include <rpc/rpc.h>
46#include <stdlib.h>
47
48/*
49 * This is the "network" that we will be moving data over
50 */
51struct svc_raw_private {
52        char    _raw_buf[UDPMSGSIZE];
53        SVCXPRT server;
54        XDR     xdr_stream;
55        char    verf_body[MAX_AUTH_BYTES];
56};
57#define svcraw_private ((struct svc_raw_private *)(rtems_rpc_task_variables)->svc_raw_private)
58
59static bool_t           svcraw_recv();
60static enum xprt_stat   svcraw_stat();
61static bool_t           svcraw_getargs();
62static bool_t           svcraw_reply();
63static bool_t           svcraw_freeargs();
64static void             svcraw_destroy();
65
66static 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
75SVCXPRT *
76svcraw_create()
77{
78        register struct svc_raw_private *srp = svcraw_private;
79
80        if (srp == 0) {
81                srp = (struct svc_raw_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
93static enum xprt_stat
94svcraw_stat()
95{
96
97        return (XPRT_IDLE);
98}
99
100static bool_t
101svcraw_recv(xprt, msg)
102        SVCXPRT *xprt;
103        struct rpc_msg *msg;
104{
105        register struct svc_raw_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
118static bool_t
119svcraw_reply(xprt, msg)
120        SVCXPRT *xprt;
121        struct rpc_msg *msg;
122{
123        register struct svc_raw_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
137static bool_t
138svcraw_getargs(xprt, xdr_args, args_ptr)
139        SVCXPRT *xprt;
140        xdrproc_t xdr_args;
141        caddr_t args_ptr;
142{
143        register struct svc_raw_private *srp = svcraw_private;
144
145        if (srp == 0)
146                return (FALSE);
147        return ((*xdr_args)(&srp->xdr_stream, args_ptr));
148}
149
150static bool_t
151svcraw_freeargs(xprt, xdr_args, args_ptr)
152        SVCXPRT *xprt;
153        xdrproc_t xdr_args;
154        caddr_t args_ptr;
155{
156        register struct svc_raw_private *srp = svcraw_private;
157        register XDR *xdrs;
158
159        if (srp == 0)
160                return (FALSE);
161        xdrs = &srp->xdr_stream;
162        xdrs->x_op = XDR_FREE;
163        return ((*xdr_args)(xdrs, args_ptr));
164}
165
166static void
167svcraw_destroy()
168{
169}
Note: See TracBrowser for help on using the repository browser.