Annotation of 43BSD/contrib/sunrpc/clnt.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
                      3:  * unrestricted use provided that this legend is included on all tape
                      4:  * media and as a part of the software program in whole or part.  Users
                      5:  * may copy or modify Sun RPC without charge, but are not authorized
                      6:  * to license or distribute it to anyone else except as part of a product or
                      7:  * program developed by the user.
                      8:  * 
                      9:  * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
                     10:  * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
                     11:  * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
                     12:  * 
                     13:  * Sun RPC is provided with no support and without any obligation on the
                     14:  * part of Sun Microsystems, Inc. to assist in its use, correction,
                     15:  * modification or enhancement.
                     16:  * 
                     17:  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
                     18:  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
                     19:  * OR ANY PART THEREOF.
                     20:  * 
                     21:  * In no event will Sun Microsystems, Inc. be liable for any lost revenue
                     22:  * or profits or other special, indirect and consequential damages, even if
                     23:  * Sun has been advised of the possibility of such damages.
                     24:  * 
                     25:  * Sun Microsystems, Inc.
                     26:  * 2550 Garcia Avenue
                     27:  * Mountain View, California  94043
                     28:  */
                     29: /*      @(#)clnt.h 1.3 85/03/20 SMI      */
                     30: 
                     31: /*
                     32:  * clnt.h - Client side remote procedure call interface.
                     33:  *
                     34:  * Copyright (C) 1984, Sun Microsystems, Inc.
                     35:  */
                     36: 
                     37: /*
                     38:  * Rpc calls return an enum clnt_stat.  This should be looked at more,
                     39:  * since each implementation is required to live with this (implementation
                     40:  * independent) list of errors.
                     41:  */
                     42: enum clnt_stat {
                     43:        RPC_SUCCESS=0,                  /* call succeeded */
                     44:        /*
                     45:         * local errors
                     46:         */
                     47:        RPC_CANTENCODEARGS=1,           /* can't encode arguments */
                     48:        RPC_CANTDECODERES=2,            /* can't decode results */
                     49:        RPC_CANTSEND=3,                 /* failure in sending call */
                     50:        RPC_CANTRECV=4,                 /* failure in receiving result */
                     51:        RPC_TIMEDOUT=5,                 /* call timed out */
                     52:        /*
                     53:         * remote errors
                     54:         */
                     55:        RPC_VERSMISMATCH=6,             /* rpc versions not compatible */
                     56:        RPC_AUTHERROR=7,                /* authentication error */
                     57:        RPC_PROGUNAVAIL=8,              /* program not available */
                     58:        RPC_PROGVERSMISMATCH=9,         /* program version mismatched */
                     59:        RPC_PROCUNAVAIL=10,             /* procedure unavailable */
                     60:        RPC_CANTDECODEARGS=11,          /* decode arguments error */
                     61:        RPC_SYSTEMERROR=12,             /* generic "other problem" */
                     62: 
                     63:        /*
                     64:         * callrpc errors
                     65:         */
                     66:        RPC_UNKNOWNHOST=13,             /* unknown host name */
                     67: 
                     68:        /*
                     69:         * _ create errors
                     70:         */
                     71:        RPC_PMAPFAILURE=14,             /* the pmapper failed in its call */
                     72:        RPC_PROGNOTREGISTERED=15,       /* remote program is not registered */
                     73:        /*
                     74:         * unspecified error
                     75:         */
                     76:        RPC_FAILED=16
                     77: };
                     78: 
                     79: 
                     80: /*
                     81:  * Error info.
                     82:  */
                     83: struct rpc_err {
                     84:        enum clnt_stat re_status;
                     85:        union {
                     86:                int RE_errno;           /* realated system error */
                     87:                enum auth_stat RE_why;  /* why the auth error occurred */
                     88:                struct {
                     89:                        u_long low;     /* lowest verion supported */
                     90:                        u_long high;    /* highest verion supported */
                     91:                } RE_vers;
                     92:                struct {                /* maybe meaningful if RPC_FAILED */
                     93:                        long s1;
                     94:                        long s2;
                     95:                } RE_lb;                /* life boot & debugging only */
                     96:        } ru;
                     97: #define        re_errno        ru.RE_errno
                     98: #define        re_why          ru.RE_why
                     99: #define        re_vers         ru.RE_vers
                    100: #define        re_lb           ru.RE_lb
                    101: };
                    102: 
                    103: 
                    104: /*
                    105:  * Client rpc handle.
                    106:  * Created by individual implementations, see e.g. rpc_udp.c.
                    107:  * Client is responsible for initializing auth, see e.g. auth_none.c.
                    108:  */
                    109: typedef struct {
                    110:        AUTH    *cl_auth;                       /* authenticator */
                    111:        struct clnt_ops {
                    112:                enum clnt_stat  (*cl_call)();   /* call remote procedure */
                    113:                void            (*cl_abort)();  /* abort a call */
                    114:                void            (*cl_geterr)(); /* get specific error code */
                    115:                bool_t          (*cl_freeres)(); /* frees results */
                    116:                void            (*cl_destroy)();/* destroy this structure */
                    117:        } *cl_ops;
                    118:        caddr_t                 cl_private;     /* private stuff */
                    119: } CLIENT;
                    120: 
                    121: 
                    122: /*
                    123:  * client side rpc interface ops
                    124:  *
                    125:  * Parameter types are:
                    126:  *
                    127:  */
                    128: 
                    129: /*
                    130:  * enum clnt_stat
                    131:  * CLNT_CALL(rh, proc, xargs, argsp, xres, resp, timeout)
                    132:  *     CLIENT *rh;
                    133:  *     u_long proc;
                    134:  *     xdrproc_t xargs;
                    135:  *     caddr_t argsp;
                    136:  *     xdrproc_t xres;
                    137:  *     caddr_t resp;
                    138:  *     struct timeval  timeout;
                    139:  */
                    140: #define        CLNT_CALL(rh, proc, xargs, argsp, xres, resp, secs)     \
                    141:        ((*(rh)->cl_ops->cl_call)(rh, proc, xargs, argsp, xres, resp, secs))
                    142: #define        clnt_call(rh, proc, xargs, argsp, xres, resp, secs)     \
                    143:        ((*(rh)->cl_ops->cl_call)(rh, proc, xargs, argsp, xres, resp, secs))
                    144: 
                    145: /*
                    146:  * void
                    147:  * CLNT_ABORT(rh);
                    148:  *     CLIENT *rh;
                    149:  */
                    150: #define        CLNT_ABORT(rh)  ((*(rh)->cl_ops->cl_abort)(rh))
                    151: #define        clnt_abort(rh)  ((*(rh)->cl_ops->cl_abort)(rh))
                    152: 
                    153: /*
                    154:  * struct rpc_err
                    155:  * CLNT_GETERR(rh);
                    156:  *     CLIENT *rh;
                    157:  */
                    158: #define        CLNT_GETERR(rh,errp)    ((*(rh)->cl_ops->cl_geterr)(rh, errp))
                    159: #define        clnt_geterr(rh,errp)    ((*(rh)->cl_ops->cl_geterr)(rh, errp))
                    160: 
                    161: 
                    162: /*
                    163:  * bool_t
                    164:  * CLNT_FREERES(rh, xres, resp);
                    165:  *     CLIENT *rh;
                    166:  *     xdrproc_t xres;
                    167:  *     caddr_t resp;
                    168:  */
                    169: #define        CLNT_FREERES(rh,xres,resp) ((*(rh)->cl_ops->cl_freeres)(rh,xres,resp))
                    170: #define        clnt_freeres(rh,xres,resp) ((*(rh)->cl_ops->cl_freeres)(rh,xres,resp))
                    171: 
                    172: /*
                    173:  * void
                    174:  * CLNT_DESTROY(rh);
                    175:  *     CLIENT *rh;
                    176:  */
                    177: #define        CLNT_DESTROY(rh)        ((*(rh)->cl_ops->cl_destroy)(rh))
                    178: #define        clnt_destroy(rh)        ((*(rh)->cl_ops->cl_destroy)(rh))
                    179: 
                    180: 
                    181: /*
                    182:  * RPCTEST is a test program which is accessable on every rpc
                    183:  * transport/port.  It is used for testing, performance evaluation,
                    184:  * and network administration.
                    185:  */
                    186: 
                    187: #define RPCTEST_PROGRAM                ((u_long)1)
                    188: #define RPCTEST_VERSION                ((u_long)1)
                    189: #define RPCTEST_NULL_PROC      ((u_long)2)
                    190: #define RPCTEST_NULL_BATCH_PROC        ((u_long)3)
                    191: 
                    192: /*
                    193:  * By convention, procedure 0 takes null arguments and returns them
                    194:  */
                    195: 
                    196: #define NULLPROC ((u_long)0)
                    197: 
                    198: /*
                    199:  * Below are the client handle creation routines for the various
                    200:  * implementations of client side rpc.  They can return NULL if a 
                    201:  * creation failure occurs.
                    202:  */
                    203: 
                    204: /*
                    205:  * Memory based rpc (for speed check and testing)
                    206:  * CLIENT *
                    207:  * clntraw_create(prog, vers)
                    208:  *     u_long prog;
                    209:  *     u_long vers;
                    210:  */
                    211: extern CLIENT *clntraw_create();
                    212: 
                    213: /*
                    214:  * UDP based rpc.
                    215:  * CLIENT *
                    216:  * clntudp_create(raddr, program, version, wait, sockp)
                    217:  *     struct sockaddr_in *raddr;
                    218:  *     u_long program;
                    219:  *     u_long version;
                    220:  *     struct timeval wait;
                    221:  *     int *sockp;
                    222:  */
                    223: extern CLIENT *clntudp_create();
                    224: #define UDPMSGSIZE 8800
                    225: 
                    226: /*
                    227:  * TCP based rpc
                    228:  * CLIENT *
                    229:  * clnttcp_create(raddr, prog, vers, sockp, sendsz, recvsz)
                    230:  *     struct sockaddr_in *raddr;
                    231:  *     u_long prog;
                    232:  *     u_long version;
                    233:  *     register int *sockp;
                    234:  *     u_int sendsz;
                    235:  *     u_int recvsz;
                    236:  */
                    237: extern CLIENT *clnttcp_create();
                    238: 
                    239: 
                    240: /* 
                    241:  * If a creation fails, the following allows the user to figure out why.
                    242:  */
                    243: struct rpc_createerr {
                    244:        enum clnt_stat cf_stat;
                    245:        struct rpc_err cf_error; /* useful when cf_stat == RPC_PMAPFAILURE */
                    246: };
                    247: 
                    248: extern struct rpc_createerr rpc_createerr;
                    249: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.