#ifndef __XDR_HEADER__
#define __XDR_HEADER__
#include <stdio.h>
enum xdr_op {
XDR_ENCODE=0,
XDR_DECODE=1,
XDR_FREE=2
};
#define BYTES_PER_XDR_UNIT (4)
#define RNDUP(x) ((((x) + BYTES_PER_XDR_UNIT - 1) / BYTES_PER_XDR_UNIT) \
* BYTES_PER_XDR_UNIT)
typedef bool_t (*xdrproc_t)();
typedef struct __xdr_s {
enum xdr_op x_op;
struct xdr_ops {
bool_t (*x_getlong)(struct __xdr_s *, long *);
bool_t (*x_putlong)(struct __xdr_s *, long *);
bool_t (*x_getbytes)(struct __xdr_s *, caddr_t, unsigned int);
bool_t (*x_putbytes)(struct __xdr_s *, caddr_t, unsigned int);
unsigned int (*x_getpostn)(struct __xdr_s *);
bool_t (*x_setpostn)(struct __xdr_s *, unsigned int);
rpc_int32 * (*x_inline)(struct __xdr_s *, int);
void (*x_destroy)(struct __xdr_s *);
} *x_ops;
caddr_t x_public;
void * x_private;
caddr_t x_base;
int x_handy;
} XDR;
#define XDR_GETLONG(xdrs, longp) \
(*(xdrs)->x_ops->x_getlong)(xdrs, longp)
#define xdr_getlong(xdrs, longp) \
(*(xdrs)->x_ops->x_getlong)(xdrs, longp)
#define XDR_PUTLONG(xdrs, longp) \
(*(xdrs)->x_ops->x_putlong)(xdrs, longp)
#define xdr_putlong(xdrs, longp) \
(*(xdrs)->x_ops->x_putlong)(xdrs, longp)
#define XDR_GETBYTES(xdrs, addr, len) \
(*(xdrs)->x_ops->x_getbytes)(xdrs, addr, len)
#define xdr_getbytes(xdrs, addr, len) \
(*(xdrs)->x_ops->x_getbytes)(xdrs, addr, len)
#define XDR_PUTBYTES(xdrs, addr, len) \
(*(xdrs)->x_ops->x_putbytes)(xdrs, addr, len)
#define xdr_putbytes(xdrs, addr, len) \
(*(xdrs)->x_ops->x_putbytes)(xdrs, addr, len)
#define XDR_GETPOS(xdrs) \
(*(xdrs)->x_ops->x_getpostn)(xdrs)
#define xdr_getpos(xdrs) \
(*(xdrs)->x_ops->x_getpostn)(xdrs)
#define XDR_SETPOS(xdrs, pos) \
(*(xdrs)->x_ops->x_setpostn)(xdrs, pos)
#define xdr_setpos(xdrs, pos) \
(*(xdrs)->x_ops->x_setpostn)(xdrs, pos)
#define XDR_INLINE(xdrs, len) \
(*(xdrs)->x_ops->x_inline)(xdrs, len)
#define xdr_inline(xdrs, len) \
(*(xdrs)->x_ops->x_inline)(xdrs, len)
#define XDR_DESTROY(xdrs) \
if ((xdrs)->x_ops->x_destroy) \
(*(xdrs)->x_ops->x_destroy)(xdrs)
#define xdr_destroy(xdrs) \
if ((xdrs)->x_ops->x_destroy) \
(*(xdrs)->x_ops->x_destroy)(xdrs)
#define NULL_xdrproc_t ((xdrproc_t)0)
struct xdr_discrim {
int value;
xdrproc_t proc;
};
#define IXDR_GET_LONG(buf) ((long)ntohl((rpc_u_int32)*(buf)++))
#define IXDR_PUT_LONG(buf, v) (*(buf)++ = (rpc_int32)htonl((rpc_u_int32)v))
#define IXDR_GET_BOOL(buf) ((bool_t)IXDR_GET_LONG(buf))
#define IXDR_GET_ENUM(buf, t) ((t)IXDR_GET_LONG(buf))
#define IXDR_GET_U_LONG(buf) ((rpc_u_int32)IXDR_GET_LONG(buf))
#define IXDR_GET_SHORT(buf) ((short)IXDR_GET_LONG(buf))
#define IXDR_GET_U_SHORT(buf) ((unsigned short)IXDR_GET_LONG(buf))
#define IXDR_PUT_BOOL(buf, v) IXDR_PUT_LONG((buf), ((rpc_int32)(v)))
#define IXDR_PUT_ENUM(buf, v) IXDR_PUT_LONG((buf), ((rpc_int32)(v)))
#define IXDR_PUT_U_LONG(buf, v) IXDR_PUT_LONG((buf), ((rpc_int32)(v)))
#define IXDR_PUT_SHORT(buf, v) IXDR_PUT_LONG((buf), ((rpc_int32)(v)))
#define IXDR_PUT_U_SHORT(buf, v) IXDR_PUT_LONG((buf), ((rpc_int32)(v)))
#define xdr_void gssrpc_xdr_void
#define xdr_int gssrpc_xdr_int
#define xdr_u_int gssrpc_xdr_u_int
#define xdr_long gssrpc_xdr_long
#define xdr_u_long gssrpc_xdr_u_long
#define xdr_short gssrpc_xdr_short
#define xdr_u_short gssrpc_xdr_u_short
#define xdr_bool gssrpc_xdr_bool
#define xdr_enum gssrpc_xdr_enum
#define xdr_array gssrpc_xdr_array
#define xdr_bytes gssrpc_xdr_bytes
#define xdr_opaque gssrpc_xdr_opaque
#define xdr_string gssrpc_xdr_string
#define xdr_union gssrpc_xdr_union
#define xdr_char gssrpc_xdr_char
#define xdr_u_char gssrpc_xdr_u_char
#define xdr_vector gssrpc_xdr_vector
#define xdr_float gssrpc_xdr_float
#define xdr_double gssrpc_xdr_double
#define xdr_reference gssrpc_xdr_reference
#define xdr_pointer gssrpc_xdr_pointer
#define xdr_wrapstring gssrpc_xdr_wrapstring
extern bool_t xdr_void(XDR *, void *);
extern bool_t xdr_int
(XDR *, int *);
extern bool_t xdr_u_int
(XDR *, unsigned int *);
extern bool_t xdr_long
(XDR *, long *);
extern bool_t xdr_u_long
(XDR *, unsigned long *);
extern bool_t xdr_short
(XDR *, short *);
extern bool_t xdr_u_short
(XDR *, unsigned short *);
extern bool_t xdr_bool
(XDR *, bool_t *);
extern bool_t xdr_enum
(XDR *, enum_t *);
extern bool_t xdr_array
(XDR *, caddr_t *, unsigned int*, unsigned int, unsigned int, xdrproc_t);
extern bool_t xdr_bytes
(XDR *, char **, unsigned int *, unsigned int);
extern bool_t xdr_opaque
(XDR *, caddr_t, unsigned int);
extern bool_t xdr_string
(XDR *, char **, unsigned int);
extern bool_t xdr_union
(XDR *, enum_t *, char *, struct xdr_discrim *, xdrproc_t);
extern bool_t xdr_char
(XDR *, char *);
extern bool_t xdr_u_char
(XDR *, unsigned char *);
extern bool_t xdr_vector
(XDR *, char *, unsigned int, unsigned int, xdrproc_t);
extern bool_t xdr_float
(XDR *, float *);
extern bool_t xdr_double
(XDR *, double *);
extern bool_t xdr_reference
(XDR *, caddr_t *, unsigned int, xdrproc_t);
extern bool_t xdr_pointer
(XDR *, char **, unsigned int, xdrproc_t);
extern bool_t xdr_wrapstring
(XDR *, char **);
#define xdr_netobj gssrpc_xdr_netobj
#define xdr_int32 gssrpc_xdr_int32
#define xdr_u_int32 gssrpc_xdr_u_int32
#define MAX_NETOBJ_SZ 1024
struct netobj {
unsigned int n_len;
char *n_bytes;
};
typedef struct netobj netobj;
extern bool_t xdr_netobj
(XDR *, struct netobj *);
extern bool_t xdr_int32
(XDR *, rpc_int32 *);
extern bool_t xdr_u_int32
(XDR *, rpc_u_int32 *);
#define xdrmem_create gssrpc_xdrmem_create
#define xdrstdio_create gssrpc_xdrstdio_create
#define xdrrec_create gssrpc_xdrrec_create
#define xdralloc_create gssrpc_xdralloc_create
#define xdralloc_release gssrpc_xdralloc_release
#define xdrrec_endofrecord gssrpc_xdrrec_endofrecord
#define xdrrec_skiprecord gssrpc_xdrrec_skiprecord
#define xdrrec_eof gssrpc_xdrrec_eof
#define xdralloc_getdata gssrpc_xdralloc_getdata
extern void xdralloc_create (XDR *xdrs, enum xdr_op op);
extern void xdralloc_release (XDR *xdrs);
extern caddr_t xdralloc_getdata (XDR *xdrs);
extern void xdrmem_create (XDR *xdrs, caddr_t addr,
unsigned int size, enum xdr_op xop);
extern void xdrstdio_create (XDR *xdrs, FILE *file,
enum xdr_op op);
extern void xdrrec_create (XDR *xdrs, unsigned int sendsize,
unsigned int recvsize, caddr_t tcp_handle,
int (*readit) (caddr_t, caddr_t, int),
int (*writeit) (caddr_t, caddr_t, int));
extern bool_t xdrrec_endofrecord (XDR *xdrs, bool_t sendnow);
extern bool_t xdrrec_skiprecord (XDR *xdrs);
extern bool_t xdrrec_eof (XDR *xdrs);
extern void gssrpc_xdr_free (xdrproc_t proc, void *__objp);
#endif