diff options
author | levine <levine@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1996-10-21 21:41:34 +0000 |
---|---|---|
committer | levine <levine@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1996-10-21 21:41:34 +0000 |
commit | a5fdebc5f6375078ec1763850a4ca23ec7fe6458 (patch) | |
tree | bcf0a25c3d45a209a6e3ac37b233a4812f29c732 /rpc++/request.cc | |
download | ATCD-a5fdebc5f6375078ec1763850a4ca23ec7fe6458.tar.gz |
Initial revision
Diffstat (limited to 'rpc++/request.cc')
-rw-r--r-- | rpc++/request.cc | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/rpc++/request.cc b/rpc++/request.cc new file mode 100644 index 00000000000..c831bb531b0 --- /dev/null +++ b/rpc++/request.cc @@ -0,0 +1,165 @@ +// -*- c++ -*- +/* +Copyright (C) 1991 Peter Bersen + +This file is part of the rpc++ Library. This library is free +software; you can redistribute it and/or modify it under the terms of +the GNU Library General Public License as published by the Free +Software Foundation; either version 2 of the License, or (at your +option) any later version. This library is distributed in the hope +that it will be useful, but WITHOUT ANY WARRANTY; without even the +implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU Library General Public License for more details. +You should have received a copy of the GNU Library General Public +License along with this library; if not, write to the Free Software +Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + +Modified and partially rewritten March 1992 by Michael N. Lipp, +mnl@dtro.e-technik.th-darmstadt.de. The original copyright terms and +conditions apply without change to any modified or new parts. +*/ + +static char _rpcpp_request_cc_[] += "request.cc,v 2.3 1992/06/15 19:12:39 mnl Exp"; + +// request.cc,v +// Revision 2.3 1992/06/15 19:12:39 mnl +// Fixed a few bugs, clarified interface. +// +// Revision 2.2 1992/06/13 14:27:01 mnl +// Adapted to (patched) gcc-2.2. Fixed several bugs. +// +// Revision 2.1.1.1 1992/03/08 13:28:42 mnl +// Initial mnl version. +// + +#ifdef __GNUG__ +#pragma implementation +#endif + +#include "rpc++/request.h" + +#include <assert.h> + +void RpcRequest::init (u_long req, int pars, int parsz, + const XdrInfo* out, const XdrInfo** in, int rt) +{ + params = pars; + parmsz = parsz; + reqnum = req; + ininfo = in; + ininfo[params] = (XdrInfo*)0; + outinfo = out; + reqtype = rt; + assert (rt == normal || outinfo->Proc () == 0); +} + +RpcRequest::RpcRequest(u_long req, const XdrInfo* out, int t) +{ + init (req, 0, 0, out, new XdrInfo*[1], t); +} + +RpcRequest::RpcRequest(u_long req, const XdrInfo* out, const XdrInfo* in, + int t) +{ + const XdrInfo** a = new XdrInfo*[2]; + a[0] = in; + init (req, 1, -1, out, a, t); +} + +RpcRequest::RpcRequest(u_long req, const XdrInfo* out, const XdrInfo* in0, + const XdrInfo* in1, int t) +{ + const XdrInfo** a = new XdrInfo*[3]; + a[0] = in0; + a[1] = in1; + init (req, 2, -1, out, a, t); +} + +RpcRequest::RpcRequest(u_long req, const XdrInfo* out, const XdrInfo* in0, + const XdrInfo* in1, const XdrInfo* in2, int t) +{ + const XdrInfo** a = new XdrInfo*[4]; + a[0] = in0; + a[1] = in1; + a[2] = in2; + init (req, 3, -1, out, a, t); +} + +RpcRequest::RpcRequest(u_long req, const XdrInfo* out, const XdrInfo* in0, + const XdrInfo* in1, const XdrInfo* in2, + const XdrInfo* in3, int t) +{ + const XdrInfo** a = new XdrInfo*[5]; + a[0] = in0; + a[1] = in1; + a[2] = in2; + a[3] = in3; + init (req, 4, -1, out, a, t); +} + +RpcRequest::RpcRequest(u_long req, const XdrInfo* out, const XdrInfo* in0, + const XdrInfo* in1, const XdrInfo* in2, + const XdrInfo* in3, const XdrInfo* in4, int t) +{ + const XdrInfo** a = new XdrInfo*[6]; + a[0] = in0; + a[1] = in1; + a[2] = in2; + a[3] = in3; + a[4] = in4; + init (req, 5, -1, out, a, t); +} + +RpcRequest::RpcRequest(u_long req, const XdrInfo* out, const XdrInfo* in0, + const XdrInfo* in1, const XdrInfo* in2, + const XdrInfo* in3, const XdrInfo* in4, + const XdrInfo* in5, int t) +{ + const XdrInfo** a = new XdrInfo*[7]; + a[0] = in0; + a[1] = in1; + a[2] = in2; + a[3] = in3; + a[4] = in4; + a[5] = in5; + init (req, 6, -1, out, a, t); +} + +RpcRequest::RpcRequest(u_long req, const XdrInfo* out, const XdrInfo* in0, + const XdrInfo* in1, const XdrInfo* in2, + const XdrInfo* in3, const XdrInfo* in4, + const XdrInfo* in5, const XdrInfo *in6, int t) +{ + const XdrInfo** a = new XdrInfo*[8]; + a[0] = in0; + a[1] = in1; + a[2] = in2; + a[3] = in3; + a[4] = in4; + a[5] = in5; + a[6] = in6; + init (req, 7, -1, out, a, t); +} + +RpcRequest::RpcRequest(u_long req, const XdrInfo* out, const XdrInfo** ins, + int t) +{ + int pars = 0; + for (XdrInfo** p = ins; *p; p++) + pars += 1; + const XdrInfo** a = new XdrInfo* [pars + 1]; + memcpy (a, ins, (pars + 1) * sizeof (XdrInfo*)); + init (req, pars, -1, out, a, t); +} + +int RpcRequest::ParamSize () +{ + if (parmsz < 0) // not yet calculated + { + parmsz = 0; + for (XdrInfo** ip = ininfo; *ip; ip++) + parmsz += (*ip)->Size (); + } + return parmsz; +} |