| /* |
| * Sun RPC is a product of Sun Microsystems, Inc. and is provided for |
| * unrestricted use provided that this legend is included on all tape |
| * media and as a part of the software program in whole or part. Users |
| * may copy or modify Sun RPC without charge, but are not authorized |
| * to license or distribute it to anyone else except as part of a product or |
| * program developed by the user. |
| * |
| * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE |
| * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR |
| * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. |
| * |
| * Sun RPC is provided with no support and without any obligation on the |
| * part of Sun Microsystems, Inc. to assist in its use, correction, |
| * modification or enhancement. |
| * |
| * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE |
| * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC |
| * OR ANY PART THEREOF. |
| * |
| * In no event will Sun Microsystems, Inc. be liable for any lost revenue |
| * or profits or other special, indirect and consequential damages, even if |
| * Sun has been advised of the possibility of such damages. |
| * |
| * Sun Microsystems, Inc. |
| * 2550 Garcia Avenue |
| * Mountain View, California 94043 |
| */ |
| |
| /* |
| * clnt.h - Client side remote procedure call interface. |
| * |
| * Copyright (C) 1984, Sun Microsystems, Inc. |
| */ |
| |
| #ifndef _RPC_CLNT_H |
| #define _RPC_CLNT_H 1 |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #include <sys/time.h> |
| |
| /* |
| * 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" */ |
| RPC_NOBROADCAST = 21, /* Broadcasting not supported */ |
| /* |
| * callrpc & clnt_create errors |
| */ |
| RPC_UNKNOWNHOST=13, /* unknown host name */ |
| RPC_UNKNOWNPROTO=17, /* unknown protocol */ |
| RPC_UNKNOWNADDR = 19, /* Remote address unknown */ |
| |
| /* |
| * rpcbind errors |
| */ |
| RPC_RPCBFAILURE=14, /* portmapper failed in its call */ |
| #define RPC_PMAPFAILURE RPC_RPCBFAILURE |
| RPC_PROGNOTREGISTERED=15, /* remote program is not registered */ |
| RPC_N2AXLATEFAILURE = 22, /* Name to addr translation failed */ |
| /* |
| * unspecified error |
| */ |
| RPC_FAILED=16, |
| RPC_INTR=18, |
| RPC_TLIERROR=20, |
| RPC_UDERROR=23, |
| /* |
| * asynchronous errors |
| */ |
| RPC_INPROGRESS = 24, |
| RPC_STALERACHANDLE = 25 |
| }; |
| |
| struct CLIENT; |
| typedef struct CLIENT CLIENT; |
| /* client call callback. |
| * Callback called when the reply is recieved or there is an error in |
| * getting reply. |
| */ |
| typedef void (*clnt_call_cb) |
| ( |
| CLIENT * clnt, |
| void * cookie, |
| caddr_t results, |
| rpc_reply_header error |
| ); |
| |
| typedef void (*clnt_call_non_blocking_cb) |
| ( |
| CLIENT * clnt, |
| void * cookie, |
| caddr_t results, |
| rpc_reply_header error |
| ); |
| |
| /* |
| * By convention, procedure 0 takes null arguments and returns them |
| */ |
| #define NULLPROC ((rpcproc_t)0) |
| |
| /*=========================================================================== |
| FUNCTION CLNT_CALL |
| |
| DESCRIPTION |
| RPCGEN support routine. This routine is called by client routines generated |
| by RPCGEN. It generates and sends an RPC message to a server. |
| |
| This is a blocking call. |
| |
| DEPENDENCIES |
| None. |
| |
| ARGUMENTS |
| xdr - the XDR to use to send the RPC message |
| proc - the server procedure to call |
| xdr_args - function pointer for encoding the RPC message args |
| args_ptr - pointer to args data structure |
| xdr_results - function pointer for decoding the RPC response |
| rets_ptr - pointer to results data structure |
| timeout - return after timeout (ignored) |
| |
| RETURN VALUE |
| RPC_SUCCESS - if successful |
| error code otherwise |
| |
| SIDE EFFECTS |
| None. |
| ===========================================================================*/ |
| extern enum clnt_stat |
| clnt_call |
| ( |
| CLIENT *h, |
| u_long proc, |
| xdrproc_t xdr_args, |
| caddr_t args_ptr, |
| xdrproc_t xdr_results, |
| caddr_t rets_ptr, |
| struct timeval timeout |
| ); |
| |
| /*=========================================================================== |
| FUNCTION CLNT_CALL_NON_BLOCKING |
| |
| DESCRIPTION |
| RPCGEN support routine. This routine is called by client routines generated |
| by RPCGEN. It generates and sends an RPC message to a server. |
| |
| This is a non-blocking call. It registers clnt_call_callback to be called |
| when the RPC response is received. |
| |
| DEPENDENCIES |
| None. |
| |
| ARGUMENTS |
| xdr - the XDR to use to send the RPC message |
| proc - the server procedure to call |
| xdr_args - function pointer for encoding the RPC message args |
| args_ptr - pointer to args data structure |
| xdr_results - function pointer for decoding the RPC response |
| results_size - size of the results data structure |
| result_cb - function pointer to be called with the results |
| cb_data - cookie for results call back function |
| |
| RETURN VALUE |
| RPC_SUCCESS - if successful |
| error code otherwise |
| |
| SIDE EFFECTS |
| None. |
| ===========================================================================*/ |
| extern enum clnt_stat |
| clnt_call_non_blocking |
| ( |
| CLIENT *h, |
| u_long proc, |
| xdrproc_t xdr_args, |
| caddr_t args_ptr, |
| xdrproc_t xdr_results, |
| int results_size, |
| clnt_call_cb result_cb, |
| void * cb_data |
| ); |
| |
| extern bool_t clnt_freeres( CLIENT *xdr, xdrproc_t xdr_res, caddr_t res_ptr ); |
| extern void clnt_destroy( CLIENT *xdr ); |
| extern CLIENT * clnt_create ( char * host, uint32 prog, uint32 vers, |
| char * proto); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* rpc/clnt.h */ |