|
|
1.1 ! root 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: * Redistribution and use in source and binary forms are permitted provided ! 13: * that: (1) source distributions retain this entire copyright notice and ! 14: * comment, and (2) distributions including binaries display the following ! 15: * acknowledgement: ``This product includes software developed by the ! 16: * University of California, Berkeley and its contributors'' in the ! 17: * documentation or other materials provided with the distribution and in ! 18: * all advertising materials mentioning features or use of this software. ! 19: * Neither the name of the University nor the names of its contributors may ! 20: * be used to endorse or promote products derived from this software without ! 21: * specific prior written permission. ! 22: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED ! 23: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF ! 24: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 25: * ! 26: * @(#)amq_svc.c 5.1 (Berkeley) 7/19/90 ! 27: */ ! 28: ! 29: #include "am.h" ! 30: #include "amq.h" ! 31: extern bool_t xdr_amq_mount_info_qelem(); ! 32: ! 33: void ! 34: amq_program_1(rqstp, transp) ! 35: struct svc_req *rqstp; ! 36: SVCXPRT *transp; ! 37: { ! 38: union { ! 39: amq_string amqproc_mnttree_1_arg; ! 40: amq_string amqproc_umnt_1_arg; ! 41: amq_setopt amqproc_setopt_1_arg; ! 42: } argument; ! 43: char *result; ! 44: bool_t (*xdr_argument)(), (*xdr_result)(); ! 45: char *(*local)(); ! 46: ! 47: switch (rqstp->rq_proc) { ! 48: case AMQPROC_NULL: ! 49: xdr_argument = xdr_void; ! 50: xdr_result = xdr_void; ! 51: local = (char *(*)()) amqproc_null_1; ! 52: break; ! 53: ! 54: case AMQPROC_MNTTREE: ! 55: xdr_argument = xdr_amq_string; ! 56: xdr_result = xdr_amq_mount_tree_p; ! 57: local = (char *(*)()) amqproc_mnttree_1; ! 58: break; ! 59: ! 60: case AMQPROC_UMNT: ! 61: xdr_argument = xdr_amq_string; ! 62: xdr_result = xdr_void; ! 63: local = (char *(*)()) amqproc_umnt_1; ! 64: break; ! 65: ! 66: case AMQPROC_STATS: ! 67: xdr_argument = xdr_void; ! 68: xdr_result = xdr_amq_mount_stats; ! 69: local = (char *(*)()) amqproc_stats_1; ! 70: break; ! 71: ! 72: case AMQPROC_EXPORT: ! 73: xdr_argument = xdr_void; ! 74: xdr_result = xdr_amq_mount_tree_list; ! 75: local = (char *(*)()) amqproc_export_1; ! 76: break; ! 77: ! 78: case AMQPROC_SETOPT: ! 79: xdr_argument = xdr_amq_setopt; ! 80: xdr_result = xdr_int; ! 81: local = (char *(*)()) amqproc_setopt_1; ! 82: break; ! 83: ! 84: case AMQPROC_GETMNTFS: ! 85: xdr_argument = xdr_void; ! 86: xdr_result = xdr_amq_mount_info_qelem; ! 87: local = (char *(*)()) amqproc_getmntfs_1; ! 88: break; ! 89: ! 90: default: ! 91: svcerr_noproc(transp); ! 92: return; ! 93: } ! 94: bzero((char *)&argument, sizeof(argument)); ! 95: if (!svc_getargs(transp, xdr_argument, &argument)) { ! 96: svcerr_decode(transp); ! 97: return; ! 98: } ! 99: result = (*local)(&argument, rqstp); ! 100: if (result != NULL && !svc_sendreply(transp, xdr_result, result)) { ! 101: svcerr_systemerr(transp); ! 102: } ! 103: if (!svc_freeargs(transp, xdr_argument, &argument)) { ! 104: plog(XLOG_FATAL, "unable to free rpc arguments in amqprog_1"); ! 105: going_down(1); ! 106: } ! 107: } ! 108:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.