/* * rpcmisc Support for RPC startup, dispatching and logging. * * Copyright (C) 1995 Olaf Kirch */ #ifndef RPCMISC_H #define RPCMISC_H #include #include #ifdef __STDC__ # define CONCAT(a,b) a##b # define STRING(a) #a #else # define CONCAT(a,b) a/**/b # define STRING(a) "a" #endif typedef bool_t (*rpcsvc_fn_t)(struct svc_req *, void *argp, void *resp); struct rpc_dentry { const char *name; rpcsvc_fn_t func; xdrproc_t xdr_arg_fn; /* argument XDR */ size_t xdr_arg_size; xdrproc_t xdr_res_fn; /* result XDR */ size_t xdr_res_size; }; struct rpc_dtable { struct rpc_dentry *entries; int nproc; }; #define dtable_ent(func, vers, arg_type, res_type) \ { STRING(func), \ (rpcsvc_fn_t)func##_##vers##_svc, \ (xdrproc_t)xdr_##arg_type, sizeof(arg_type), \ (xdrproc_t)xdr_##res_type, sizeof(res_type), \ } int makesock(int port, int proto); void rpc_init(char *name, int prog, int vers, void (*dispatch)(struct svc_req *, SVCXPRT *), int defport); void rpc_svcrun(void); void rpc_dispatch(struct svc_req *rq, SVCXPRT *xprt, struct rpc_dtable *dtable, int nvers, void *argp, void *resp); void rpc_logcall(struct svc_req *, char *xname, char *args); extern int _rpcpmstart; extern int _rpcfdtype; extern int _rpcsvcdirty; #endif /* RPCMISC_H */