home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume21 / amd / part02 / amq_svc.c < prev    next >
C/C++ Source or Header  |  1990-04-10  |  3KB  |  108 lines

  1. /*
  2.  * $Id: amq_svc.c,v 5.1.1.1 90/01/11 17:04:11 jsp Exp Locker: jsp $
  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
  13.  * provided that the above copyright notice and this paragraph are
  14.  * duplicated in all such forms and that any documentation,
  15.  * advertising materials, and other materials related to such
  16.  * distribution and use acknowledge that the software was developed
  17.  * by Imperial College of Science, Technology and Medicine, London, UK.
  18.  * The names of the College and University may not be used to endorse
  19.  * or promote products derived from this software without specific
  20.  * prior written permission.
  21.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  22.  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  23.  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  24.  *
  25.  *    %W% (Berkeley) %G%
  26.  */
  27.  
  28. #include "am.h"
  29. #include "amq.h"
  30. extern bool_t xdr_amq_mount_info_qelem();
  31.  
  32. void
  33. amq_program_1(rqstp, transp)
  34.     struct svc_req *rqstp;
  35.     SVCXPRT *transp;
  36. {
  37.     union {
  38.         amq_string amqproc_mnttree_1_arg;
  39.         amq_string amqproc_umnt_1_arg;
  40.         amq_setopt amqproc_setopt_1_arg;
  41.     } argument;
  42.     char *result;
  43.     bool_t (*xdr_argument)(), (*xdr_result)();
  44.     char *(*local)();
  45.  
  46.     switch (rqstp->rq_proc) {
  47.     case AMQPROC_NULL:
  48.         xdr_argument = xdr_void;
  49.         xdr_result = xdr_void;
  50.         local = (char *(*)()) amqproc_null_1;
  51.         break;
  52.  
  53.     case AMQPROC_MNTTREE:
  54.         xdr_argument = xdr_amq_string;
  55.         xdr_result = xdr_amq_mount_tree_p;
  56.         local = (char *(*)()) amqproc_mnttree_1;
  57.         break;
  58.  
  59.     case AMQPROC_UMNT:
  60.         xdr_argument = xdr_amq_string;
  61.         xdr_result = xdr_void;
  62.         local = (char *(*)()) amqproc_umnt_1;
  63.         break;
  64.  
  65.     case AMQPROC_STATS:
  66.         xdr_argument = xdr_void;
  67.         xdr_result = xdr_amq_mount_stats;
  68.         local = (char *(*)()) amqproc_stats_1;
  69.         break;
  70.  
  71.     case AMQPROC_EXPORT:
  72.         xdr_argument = xdr_void;
  73.         xdr_result = xdr_amq_mount_tree_list;
  74.         local = (char *(*)()) amqproc_export_1;
  75.         break;
  76.  
  77.     case AMQPROC_SETOPT:
  78.         xdr_argument = xdr_amq_setopt;
  79.         xdr_result = xdr_int;
  80.         local = (char *(*)()) amqproc_setopt_1;
  81.         break;
  82.  
  83.     case AMQPROC_GETMNTFS:
  84.         xdr_argument = xdr_void;
  85.         xdr_result = xdr_amq_mount_info_qelem;
  86.         local = (char *(*)()) amqproc_getmntfs_1;
  87.         break;
  88.  
  89.     default:
  90.         svcerr_noproc(transp);
  91.         return;
  92.     }
  93.     bzero((char *)&argument, sizeof(argument));
  94.     if (!svc_getargs(transp, xdr_argument, &argument)) {
  95.         svcerr_decode(transp);
  96.         return;
  97.     }
  98.     result = (*local)(&argument, rqstp);
  99.     if (result != NULL && !svc_sendreply(transp, xdr_result, result)) {
  100.         svcerr_systemerr(transp);
  101.     }
  102.     if (!svc_freeargs(transp, xdr_argument, &argument)) {
  103.         plog(XLOG_FATAL, "unable to free rpc arguments in amqprog_1");
  104.         going_down(1);
  105.     }
  106. }
  107.  
  108.