xref: /original-bsd/usr.sbin/amd/rpcx/amq_svc.c (revision 8477994b)
1 /*
2  * $Id: amq_svc.c,v 5.2 90/06/23 22:20:17 jsp Rel $
3  *
4  * Copyright (c) 1990 Jan-Simon Pendry
5  * Copyright (c) 1990 Imperial College of Science, Technology & Medicine
6  * Copyright (c) 1990 The Regents of the University of California.
7  * All rights reserved.
8  *
9  * This code is derived from software contributed to Berkeley by
10  * Jan-Simon Pendry at Imperial College, London.
11  *
12  * %sccs.include.redist.c%
13  *
14  *	@(#)amq_svc.c	5.1 (Berkeley) 07/19/90
15  */
16 
17 #include "am.h"
18 #include "amq.h"
19 extern bool_t xdr_amq_mount_info_qelem();
20 
21 void
22 amq_program_1(rqstp, transp)
23 	struct svc_req *rqstp;
24 	SVCXPRT *transp;
25 {
26 	union {
27 		amq_string amqproc_mnttree_1_arg;
28 		amq_string amqproc_umnt_1_arg;
29 		amq_setopt amqproc_setopt_1_arg;
30 	} argument;
31 	char *result;
32 	bool_t (*xdr_argument)(), (*xdr_result)();
33 	char *(*local)();
34 
35 	switch (rqstp->rq_proc) {
36 	case AMQPROC_NULL:
37 		xdr_argument = xdr_void;
38 		xdr_result = xdr_void;
39 		local = (char *(*)()) amqproc_null_1;
40 		break;
41 
42 	case AMQPROC_MNTTREE:
43 		xdr_argument = xdr_amq_string;
44 		xdr_result = xdr_amq_mount_tree_p;
45 		local = (char *(*)()) amqproc_mnttree_1;
46 		break;
47 
48 	case AMQPROC_UMNT:
49 		xdr_argument = xdr_amq_string;
50 		xdr_result = xdr_void;
51 		local = (char *(*)()) amqproc_umnt_1;
52 		break;
53 
54 	case AMQPROC_STATS:
55 		xdr_argument = xdr_void;
56 		xdr_result = xdr_amq_mount_stats;
57 		local = (char *(*)()) amqproc_stats_1;
58 		break;
59 
60 	case AMQPROC_EXPORT:
61 		xdr_argument = xdr_void;
62 		xdr_result = xdr_amq_mount_tree_list;
63 		local = (char *(*)()) amqproc_export_1;
64 		break;
65 
66 	case AMQPROC_SETOPT:
67 		xdr_argument = xdr_amq_setopt;
68 		xdr_result = xdr_int;
69 		local = (char *(*)()) amqproc_setopt_1;
70 		break;
71 
72 	case AMQPROC_GETMNTFS:
73 		xdr_argument = xdr_void;
74 		xdr_result = xdr_amq_mount_info_qelem;
75 		local = (char *(*)()) amqproc_getmntfs_1;
76 		break;
77 
78 	default:
79 		svcerr_noproc(transp);
80 		return;
81 	}
82 	bzero((char *)&argument, sizeof(argument));
83 	if (!svc_getargs(transp, xdr_argument, &argument)) {
84 		svcerr_decode(transp);
85 		return;
86 	}
87 	result = (*local)(&argument, rqstp);
88 	if (result != NULL && !svc_sendreply(transp, xdr_result, result)) {
89 		svcerr_systemerr(transp);
90 	}
91 	if (!svc_freeargs(transp, xdr_argument, &argument)) {
92 		plog(XLOG_FATAL, "unable to free rpc arguments in amqprog_1");
93 		going_down(1);
94 	}
95 }
96 
97