#ifndef _RPC_SVC_MT_H
#define _RPC_SVC_MT_H
#include <synch.h>
#ifdef __cplusplus
extern "C" {
#endif
#define SVC_VERSQUIET 0x0001
#define SVC_DEFUNCT 0x0002
#define SVC_DGRAM 0x0004
#define SVC_RENDEZVOUS 0x0008
#define SVC_CONNECTION 0x000c
#define SVC_DOOR 0x0010
#define SVC_TYPE_MASK 0x001c
#define SVC_FAILED 0x0020
#define SVC_ARGS_CHECK 0x0040
#define svc_flags(xprt) (SVCEXT(xprt)->flags)
#define version_keepquiet(xprt) (svc_flags(xprt) & SVC_VERSQUIET)
#define svc_defunct(xprt) ((svc_flags(xprt) & SVC_DEFUNCT) ? TRUE : FALSE)
#define svc_failed(xprt) ((svc_flags(xprt) & SVC_FAILED) ? TRUE : FALSE)
#define svc_type(xprt) (svc_flags(xprt) & SVC_TYPE_MASK)
#define svc_send_mutex(xprt) (SVCEXT(xprt)->send_mutex)
typedef struct {
bool_t established;
rpc_gss_service_t service;
uint_t qop_rcvd;
void *context;
uint_t seq_num;
} svc_rpc_gss_parms_t;
typedef struct {
struct svc_auth_ops {
int (*svc_ah_wrap)();
int (*svc_ah_unwrap)();
} svc_ah_ops;
caddr_t svc_ah_private;
svc_rpc_gss_parms_t svc_gss_parms;
rpc_gss_rawcred_t raw_cred;
} SVCAUTH;
typedef struct svcxprt_list_t {
struct svcxprt_list_t *next;
SVCXPRT *xprt;
} SVCXPRT_LIST;
typedef struct svcxprt_ext_t {
int flags;
SVCXPRT *parent;
struct rpc_msg *msg;
struct svc_req *req;
char *cred_area;
int refcnt;
SVCXPRT_LIST *my_xlist;
mutex_t send_mutex;
SVCAUTH xp_auth;
} SVCXPRT_EXT;
#define SVCEXT(xprt) ((SVCXPRT_EXT *)((xprt)->xp_p3))
#define SVC_XP_AUTH(xprt) (SVCEXT(xprt)->xp_auth)
#define SVCAUTH_WRAP(auth, xdrs, xfunc, xwhere) \
((*((auth)->svc_ah_ops.svc_ah_wrap))(auth, xdrs, xfunc, xwhere))
#define SVCAUTH_UNWRAP(auth, xdrs, xfunc, xwhere) \
((*((auth)->svc_ah_ops.svc_ah_unwrap))(auth, xdrs, xfunc, xwhere))
extern SVCXPRT **svc_xports;
extern XDR **svc_xdrs;
extern int svc_mt_mode;
extern mutex_t svc_thr_mutex;
extern cond_t svc_thr_fdwait;
extern int svc_nfds;
extern int svc_nfds_set;
extern int svc_max_fd;
extern mutex_t svc_mutex;
extern mutex_t svc_exit_mutex;
extern int svc_pipe[2];
extern bool_t svc_polling;
SVCXPRT *svc_xprt_alloc();
SVCXPRT *svc_dg_xprtcopy();
SVCXPRT *svc_vc_xprtcopy();
SVCXPRT *svc_fd_xprtcopy();
SVCXPRT *svc_copy();
void svc_xprt_free();
void svc_xprt_destroy();
void svc_dg_xprtfree();
void svc_vc_xprtfree();
void svc_fd_xprtfree();
void svc_door_xprtfree();
void svc_args_done();
void _svc_dg_destroy_private();
void _svc_vc_destroy_private();
void _svc_destroy_private();
#define RPC_DOOR_DIR "/var/run/rpc_door"
#define RPC_DOOR_RENDEZVOUS "/var/run/rpc_door/rpc_%d.%d"
#ifdef __cplusplus
}
#endif
#endif