4 #include <stdlib.h> /* getenv, exit */
8 /* States a server can be in wrt request */
13 static int _rpcsvcstate = _IDLE; /* Set when a request is serviced */
14 static int _rpcsvccount = 0; /* Number of requests being serviced */
17 rpc_test_prog_1_svc(rqstp, transp)
18 struct svc_req *rqstp;
19 register SVCXPRT *transp;
22 char *rpc_test_echo_1_arg;
25 bool_t (*xdr_argument)(), (*xdr_result)();
29 switch (rqstp->rq_proc) {
31 (void) svc_sendreply(transp, xdr_void,
34 _rpcsvcstate = _SERVED;
38 xdr_argument = xdr_wrapstring;
39 xdr_result = xdr_wrapstring;
40 local = (char *(*)()) rpc_test_echo_1_svc;
44 svcerr_noproc(transp);
46 _rpcsvcstate = _SERVED;
49 (void) memset(&argument, 0, sizeof (argument));
50 if (!svc_getargs(transp, xdr_argument, &argument)) {
51 svcerr_decode(transp);
53 _rpcsvcstate = _SERVED;
56 result = (*local)(&argument, rqstp);
57 if (result != NULL && !svc_sendreply(transp, xdr_result, result)) {
58 svcerr_systemerr(transp);
60 if (!svc_freeargs(transp, xdr_argument, &argument)) {
61 syslog(LOG_ERR, "unable to free arguments");
65 _rpcsvcstate = _SERVED;