123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346 |
- /* @(#)clnt.h 2.1 88/07/29 4.0 RPCSRC; from 1.31 88/02/08 SMI*/
- /*
- * Copyright (c) 2010, Oracle America, Inc.
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * * Neither the name of the "Oracle America, Inc." nor the names of
- * its contributors may be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- /*
- * clnt.h - Client side remote procedure call interface.
- */
- #ifndef GSSRPC_CLNT_H
- #define GSSRPC_CLNT_H
- GSSRPC__BEGIN_DECLS
- /*
- * Rpc calls return an enum clnt_stat. This should be looked at more,
- * since each implementation is required to live with this (implementation
- * independent) list of errors.
- */
- enum clnt_stat {
- RPC_SUCCESS=0, /* call succeeded */
- /*
- * local errors
- */
- RPC_CANTENCODEARGS=1, /* can't encode arguments */
- RPC_CANTDECODERES=2, /* can't decode results */
- RPC_CANTSEND=3, /* failure in sending call */
- RPC_CANTRECV=4, /* failure in receiving result */
- RPC_TIMEDOUT=5, /* call timed out */
- /*
- * remote errors
- */
- RPC_VERSMISMATCH=6, /* rpc versions not compatible */
- RPC_AUTHERROR=7, /* authentication error */
- RPC_PROGUNAVAIL=8, /* program not available */
- RPC_PROGVERSMISMATCH=9, /* program version mismatched */
- RPC_PROCUNAVAIL=10, /* procedure unavailable */
- RPC_CANTDECODEARGS=11, /* decode arguments error */
- RPC_SYSTEMERROR=12, /* generic "other problem" */
- /*
- * callrpc & clnt_create errors
- */
- RPC_UNKNOWNHOST=13, /* unknown host name */
- RPC_UNKNOWNPROTO=17, /* unknown protocol */
- /*
- * _ create errors
- */
- RPC_PMAPFAILURE=14, /* the pmapper failed in its call */
- RPC_PROGNOTREGISTERED=15, /* remote program is not registered */
- /*
- * unspecified error
- */
- RPC_FAILED=16
- };
- /*
- * Error info.
- */
- struct rpc_err {
- enum clnt_stat re_status;
- union {
- int RE_errno; /* realated system error */
- enum auth_stat RE_why; /* why the auth error occurred */
- struct {
- rpcvers_t low; /* lowest version supported */
- rpcvers_t high; /* highest version supported */
- } RE_vers;
- struct { /* maybe meaningful if RPC_FAILED */
- int32_t s1;
- int32_t s2;
- } RE_lb; /* life boot & debugging only */
- } ru;
- #define re_errno ru.RE_errno
- #define re_why ru.RE_why
- #define re_vers ru.RE_vers
- #define re_lb ru.RE_lb
- };
- /*
- * Client rpc handle.
- * Created by individual implementations, see e.g. rpc_udp.c.
- * Client is responsible for initializing auth, see e.g. auth_none.c.
- */
- typedef struct CLIENT {
- AUTH *cl_auth; /* authenticator */
- struct clnt_ops {
- /* call remote procedure */
- enum clnt_stat (*cl_call)(struct CLIENT *,
- rpcproc_t, xdrproc_t, void *,
- xdrproc_t, void *,
- struct timeval);
- /* abort a call */
- void (*cl_abort)(struct CLIENT *);
- /* get specific error code */
- void (*cl_geterr)(struct CLIENT *,
- struct rpc_err *);
- /* frees results */
- bool_t (*cl_freeres)(struct CLIENT *,
- xdrproc_t, void *);
- /* destroy this structure */
- void (*cl_destroy)(struct CLIENT *);
- /* the ioctl() of rpc */
- /* XXX CITI makes 2nd arg take u_int */
- bool_t (*cl_control)(struct CLIENT *, int,
- void *);
- } *cl_ops;
- void *cl_private; /* private stuff */
- } CLIENT;
- /*
- * client side rpc interface ops
- *
- * Parameter types are:
- *
- */
- /*
- * enum clnt_stat
- * CLNT_CALL(rh, proc, xargs, argsp, xres, resp, timeout)
- * CLIENT *rh;
- * rpcproc_t proc;
- * xdrproc_t xargs;
- * caddr_t argsp;
- * xdrproc_t xres;
- * caddr_t resp;
- * struct timeval timeout;
- */
- #define CLNT_CALL(rh, proc, xargs, argsp, xres, resp, secs) \
- ((*(rh)->cl_ops->cl_call)(rh, proc, xargs, argsp, xres, resp, secs))
- #define clnt_call(rh, proc, xargs, argsp, xres, resp, secs) \
- ((*(rh)->cl_ops->cl_call)(rh, proc, xargs, argsp, xres, resp, secs))
- /*
- * void
- * CLNT_ABORT(rh);
- * CLIENT *rh;
- */
- #define CLNT_ABORT(rh) ((*(rh)->cl_ops->cl_abort)(rh))
- #define clnt_abort(rh) ((*(rh)->cl_ops->cl_abort)(rh))
- /*
- * struct rpc_err
- * CLNT_GETERR(rh);
- * CLIENT *rh;
- */
- #define CLNT_GETERR(rh,errp) ((*(rh)->cl_ops->cl_geterr)(rh, errp))
- #define clnt_geterr(rh,errp) ((*(rh)->cl_ops->cl_geterr)(rh, errp))
- /*
- * bool_t
- * CLNT_FREERES(rh, xres, resp);
- * CLIENT *rh;
- * xdrproc_t xres;
- * caddr_t resp;
- */
- #define CLNT_FREERES(rh,xres,resp) ((*(rh)->cl_ops->cl_freeres)(rh,xres,resp))
- #define clnt_freeres(rh,xres,resp) ((*(rh)->cl_ops->cl_freeres)(rh,xres,resp))
- /*
- * bool_t
- * CLNT_CONTROL(cl, request, info)
- * CLIENT *cl;
- * u_int request;
- * char *info;
- */
- #define CLNT_CONTROL(cl,rq,in) ((*(cl)->cl_ops->cl_control)(cl,rq,in))
- #define clnt_control(cl,rq,in) ((*(cl)->cl_ops->cl_control)(cl,rq,in))
- /*
- * control operations that apply to both udp and tcp transports
- */
- #define CLSET_TIMEOUT 1 /* set timeout (timeval) */
- #define CLGET_TIMEOUT 2 /* get timeout (timeval) */
- #define CLGET_SERVER_ADDR 3 /* get server's address (sockaddr) */
- /*
- * udp only control operations
- */
- #define CLSET_RETRY_TIMEOUT 4 /* set retry timeout (timeval) */
- #define CLGET_RETRY_TIMEOUT 5 /* get retry timeout (timeval) */
- /*
- * new control operations
- */
- #define CLGET_LOCAL_ADDR 6 /* get local address (sockaddr, getsockname)*/
- /*
- * void
- * CLNT_DESTROY(rh);
- * CLIENT *rh;
- */
- #define CLNT_DESTROY(rh) ((*(rh)->cl_ops->cl_destroy)(rh))
- #define clnt_destroy(rh) ((*(rh)->cl_ops->cl_destroy)(rh))
- /*
- * RPCTEST is a test program which is accessible on every rpc
- * transport/port. It is used for testing, performance evaluation,
- * and network administration.
- */
- #define RPCTEST_PROGRAM ((rpcprog_t)1)
- #define RPCTEST_VERSION ((rpcvers_t)1)
- #define RPCTEST_NULL_PROC ((rpcproc_t)2)
- #define RPCTEST_NULL_BATCH_PROC ((rpcproc_t)3)
- /*
- * By convention, procedure 0 takes null arguments and returns them
- */
- #define NULLPROC ((rpcproc_t)0)
- /*
- * Below are the client handle creation routines for the various
- * implementations of client side rpc. They can return NULL if a
- * creation failure occurs.
- */
- /*
- * Memory based rpc (for speed check and testing)
- * CLIENT *
- * clntraw_create(prog, vers)
- * rpcprog_t prog;
- * rpcvers_t vers;
- */
- extern CLIENT *clntraw_create(rpcprog_t, rpcvers_t);
- /*
- * Generic client creation routine. Supported protocols are "udp" and "tcp"
- */
- extern CLIENT *clnt_create(char *, rpcprog_t, rpcvers_t, char *);
- /*
- * TCP based rpc
- * CLIENT *
- * clnttcp_create(raddr, prog, vers, sockp, sendsz, recvsz)
- * struct sockaddr_in *raddr;
- * rpcprog_t prog;
- * rpcvers_t version;
- * int *sockp;
- * u_int sendsz;
- * u_int recvsz;
- */
- extern CLIENT *clnttcp_create(struct sockaddr_in *, rpcprog_t, rpcvers_t,
- int *, u_int, u_int);
- /*
- * UDP based rpc.
- * CLIENT *
- * clntudp_create(raddr, program, version, wait, sockp)
- * struct sockaddr_in *raddr;
- * rpcprog_t program;
- * rpcvers_t version;
- * struct timeval wait;
- * int *sockp;
- *
- * Same as above, but you specify max packet sizes.
- * CLIENT *
- * clntudp_bufcreate(raddr, program, version, wait, sockp, sendsz, recvsz)
- * struct sockaddr_in *raddr;
- * rpcprog_t program;
- * rpcvers_t version;
- * struct timeval wait;
- * int *sockp;
- * u_int sendsz;
- * u_int recvsz;
- */
- extern CLIENT *clntudp_create(struct sockaddr_in *, rpcprog_t,
- rpcvers_t, struct timeval, int *);
- extern CLIENT *clntudp_bufcreate(struct sockaddr_in *, rpcprog_t,
- rpcvers_t, struct timeval, int *,
- u_int, u_int);
- /*
- * Print why creation failed
- */
- void clnt_pcreateerror(char *); /* stderr */
- char *clnt_spcreateerror(char *); /* string */
- /*
- * Like clnt_perror(), but is more verbose in its output
- */
- void clnt_perrno(enum clnt_stat); /* stderr */
- /*
- * Print an English error message, given the client error code
- */
- void clnt_perror(CLIENT *, char *); /* stderr */
- char *clnt_sperror(CLIENT *, char *); /* string */
- /*
- * If a creation fails, the following allows the user to figure out why.
- */
- struct rpc_createerr {
- enum clnt_stat cf_stat;
- struct rpc_err cf_error; /* useful when cf_stat == RPC_PMAPFAILURE */
- };
- extern struct rpc_createerr rpc_createerr;
- /*
- * Copy error message to buffer.
- */
- char *clnt_sperrno(enum clnt_stat num); /* string */
- #define UDPMSGSIZE 8800 /* rpc imposed limit on udp msg size */
- #define RPCSMALLMSGSIZE 400 /* a more reasonable packet size */
- GSSRPC__END_DECLS
- #endif /* !defined(GSSRPC_CLNT_H) */
|