* Sun RPC is a product of Sun Microsystems, Inc. and is provided for
* unrestricted use provided that this legend is included on all tape
* media and as a part of the software program in whole or part. Users
* may copy or modify Sun RPC without charge, but are not authorized
* to license or distribute it to anyone else except as part of a product or
* program developed by the user.
* SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
* WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
* PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
* Sun RPC is provided with no support and without any obligation on the
* part of Sun Microsystems, Inc. to assist in its use, correction,
* modification or enhancement.
* SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
* INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
* In no event will Sun Microsystems, Inc. be liable for any lost revenue
* or profits or other special, indirect and consequential damages, even if
* Sun has been advised of the possibility of such damages.
* Mountain View, California 94043
static char sccsid
[] = "@(#)svc_simple.c 1.3 85/03/14 Copyr 1984 Sun Micro";
* Simplified front end to rpc.
* Copyright (C) 1984, Sun Microsystems, Inc.
xdrproc_t p_inproc
, p_outproc
;
registerrpc(prognum
, versnum
, procnum
, progname
, inproc
, outproc
)
xdrproc_t inproc
, outproc
;
if (procnum
== NULLPROC
) {
"can't reassign procedure number %d\n", NULLPROC
);
transp
= svcudp_create(RPC_ANYSOCK
);
fprintf(stderr
, "couldn't create an rpc server\n");
pmap_unset(prognum
, versnum
);
if (!svc_register(transp
, prognum
, versnum
, universal
, IPPROTO_UDP
)) {
fprintf(stderr
, "couldn't register prog %d vers %d\n",
pl
= (struct proglst
*)malloc(sizeof(struct proglst
));
fprintf(stderr
, "registerrpc: out of memory\n");
pl
->p_progname
= progname
;
* enforce "procnum 0 is echo" convention
if (rqstp
->rq_proc
== NULLPROC
) {
if (svc_sendreply(transp
, xdr_void
, 0) == FALSE
) {
fprintf(stderr
, "xxx\n");
for (pl
= proglst
; pl
!= NULL
; pl
= pl
->p_nxt
)
if (pl
->p_prognum
== prog
&& pl
->p_procnum
== proc
) {
/* decode arguments into a CLEAN buffer */
bzero(xdrbuf
, sizeof(xdrbuf
)); /* required ! */
if (!svc_getargs(transp
, pl
->p_inproc
, xdrbuf
)) {
outdata
= (*(pl
->p_progname
))(xdrbuf
);
if (outdata
== NULL
&& pl
->p_outproc
!= xdr_void
)
if (!svc_sendreply(transp
, pl
->p_outproc
, outdata
)) {
"trouble replying to prog %d\n",
/* free the decoded arguments */
(void)svc_freeargs(transp
, pl
->p_inproc
, xdrbuf
);
fprintf(stderr
, "never registered prog %d\n", prog
);