/* * 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 */