File indexing completed on 2025-01-18 10:01:04
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040 #ifndef GSSRPC_XDR_H
0041 #define GSSRPC_XDR_H
0042
0043 #include <stdio.h> /* for FILE */
0044
0045 GSSRPC__BEGIN_DECLS
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081 enum xdr_op {
0082 XDR_ENCODE=0,
0083 XDR_DECODE=1,
0084 XDR_FREE=2
0085 };
0086
0087
0088
0089
0090 #define BYTES_PER_XDR_UNIT (4)
0091 #define RNDUP(x) ((((x) + BYTES_PER_XDR_UNIT - 1) / BYTES_PER_XDR_UNIT) \
0092 * BYTES_PER_XDR_UNIT)
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105 typedef bool_t (*xdrproc_t)();
0106
0107
0108
0109
0110
0111
0112
0113 typedef struct XDR {
0114 enum xdr_op x_op;
0115 struct xdr_ops {
0116
0117 bool_t (*x_getlong)(struct XDR *, long *);
0118
0119
0120 bool_t (*x_putlong)(struct XDR *, long *);
0121
0122
0123 bool_t (*x_getbytes)(struct XDR *, caddr_t, u_int);
0124
0125
0126 bool_t (*x_putbytes)(struct XDR *, caddr_t, u_int);
0127
0128
0129 u_int (*x_getpostn)(struct XDR *);
0130
0131
0132 bool_t (*x_setpostn)(struct XDR *, u_int);
0133
0134
0135 rpc_inline_t *(*x_inline)(struct XDR *, int);
0136
0137
0138 void (*x_destroy)(struct XDR *);
0139 } *x_ops;
0140 caddr_t x_public;
0141 void * x_private;
0142 caddr_t x_base;
0143 int x_handy;
0144 } XDR;
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155 #define XDR_GETLONG(xdrs, longp) \
0156 (*(xdrs)->x_ops->x_getlong)(xdrs, longp)
0157 #define xdr_getlong(xdrs, longp) \
0158 (*(xdrs)->x_ops->x_getlong)(xdrs, longp)
0159
0160 #define XDR_PUTLONG(xdrs, longp) \
0161 (*(xdrs)->x_ops->x_putlong)(xdrs, longp)
0162 #define xdr_putlong(xdrs, longp) \
0163 (*(xdrs)->x_ops->x_putlong)(xdrs, longp)
0164
0165 #define XDR_GETBYTES(xdrs, addr, len) \
0166 (*(xdrs)->x_ops->x_getbytes)(xdrs, addr, len)
0167 #define xdr_getbytes(xdrs, addr, len) \
0168 (*(xdrs)->x_ops->x_getbytes)(xdrs, addr, len)
0169
0170 #define XDR_PUTBYTES(xdrs, addr, len) \
0171 (*(xdrs)->x_ops->x_putbytes)(xdrs, addr, len)
0172 #define xdr_putbytes(xdrs, addr, len) \
0173 (*(xdrs)->x_ops->x_putbytes)(xdrs, addr, len)
0174
0175 #define XDR_GETPOS(xdrs) \
0176 (*(xdrs)->x_ops->x_getpostn)(xdrs)
0177 #define xdr_getpos(xdrs) \
0178 (*(xdrs)->x_ops->x_getpostn)(xdrs)
0179
0180 #define XDR_SETPOS(xdrs, pos) \
0181 (*(xdrs)->x_ops->x_setpostn)(xdrs, pos)
0182 #define xdr_setpos(xdrs, pos) \
0183 (*(xdrs)->x_ops->x_setpostn)(xdrs, pos)
0184
0185 #define XDR_INLINE(xdrs, len) \
0186 (*(xdrs)->x_ops->x_inline)(xdrs, len)
0187 #define xdr_inline(xdrs, len) \
0188 (*(xdrs)->x_ops->x_inline)(xdrs, len)
0189
0190 #define XDR_DESTROY(xdrs) \
0191 if ((xdrs)->x_ops->x_destroy) \
0192 (*(xdrs)->x_ops->x_destroy)(xdrs)
0193 #define xdr_destroy(xdrs) \
0194 if ((xdrs)->x_ops->x_destroy) \
0195 (*(xdrs)->x_ops->x_destroy)(xdrs)
0196
0197
0198
0199
0200
0201
0202
0203
0204
0205
0206
0207 #define NULL_xdrproc_t ((xdrproc_t)0)
0208 struct xdr_discrim {
0209 int value;
0210 xdrproc_t proc;
0211 };
0212
0213
0214
0215
0216
0217
0218
0219
0220
0221
0222
0223
0224
0225
0226
0227
0228 #define IXDR_GET_INT32(buf) ((int32_t)IXDR_GET_U_INT32(buf))
0229 #define IXDR_PUT_INT32(buf, v) IXDR_PUT_U_INT32((buf),((uint32_t)(v)))
0230 #define IXDR_GET_U_INT32(buf) (ntohl((uint32_t)*(buf)++))
0231 #define IXDR_PUT_U_INT32(buf, v) (*(buf)++ = (int32_t)htonl((v)))
0232
0233 #define IXDR_GET_LONG(buf) ((long)IXDR_GET_INT32(buf))
0234 #define IXDR_PUT_LONG(buf, v) IXDR_PUT_U_INT32((buf),((uint32_t)(v)))
0235
0236 #define IXDR_GET_BOOL(buf) ((bool_t)IXDR_GET_LONG(buf))
0237 #define IXDR_GET_ENUM(buf, t) ((t)IXDR_GET_INT32(buf))
0238 #define IXDR_GET_U_LONG(buf) ((u_long)IXDR_GET_U_INT32(buf))
0239 #define IXDR_GET_SHORT(buf) ((short)IXDR_GET_INT32(buf))
0240 #define IXDR_GET_U_SHORT(buf) ((u_short)IXDR_GET_U_INT32(buf))
0241
0242 #define IXDR_PUT_BOOL(buf, v) IXDR_PUT_INT32((buf),((int32_t)(v)))
0243 #define IXDR_PUT_ENUM(buf, v) IXDR_PUT_INT32((buf),((int32_t)(v)))
0244 #define IXDR_PUT_U_LONG(buf, v) IXDR_PUT_U_INT32((buf),((uint32_t)(v)))
0245 #define IXDR_PUT_SHORT(buf, v) IXDR_PUT_INT32((buf),((int32_t)(v)))
0246 #define IXDR_PUT_U_SHORT(buf, v) IXDR_PUT_U_INT32((buf),((uint32_t)(v)))
0247
0248
0249
0250
0251 extern bool_t xdr_void(XDR *, void *);
0252 extern bool_t xdr_int(XDR *, int *);
0253 extern bool_t xdr_u_int(XDR *, u_int *);
0254 extern bool_t xdr_long(XDR *, long *);
0255 extern bool_t xdr_u_long(XDR *, u_long *);
0256 extern bool_t xdr_short(XDR *, short *);
0257 extern bool_t xdr_u_short(XDR *, u_short *);
0258 extern bool_t xdr_bool(XDR *, bool_t *);
0259 extern bool_t xdr_enum(XDR *, enum_t *);
0260 extern bool_t xdr_array(XDR *, caddr_t *, u_int *,
0261 u_int, u_int, xdrproc_t);
0262 extern bool_t xdr_bytes(XDR *, char **, u_int *, u_int);
0263 extern bool_t xdr_opaque(XDR *, caddr_t, u_int);
0264 extern bool_t xdr_string(XDR *, char **, u_int);
0265 extern bool_t xdr_union(XDR *, enum_t *, char *, struct xdr_discrim *,
0266 xdrproc_t);
0267 extern bool_t xdr_char(XDR *, char *);
0268 extern bool_t xdr_u_char(XDR *, u_char *);
0269 extern bool_t xdr_vector(XDR *, char *, u_int, u_int, xdrproc_t);
0270 extern bool_t xdr_float(XDR *, float *);
0271 extern bool_t xdr_double(XDR *, double *);
0272 extern bool_t xdr_reference(XDR *, caddr_t *, u_int, xdrproc_t);
0273 extern bool_t xdr_pointer(XDR *, char **, u_int, xdrproc_t);
0274 extern bool_t xdr_wrapstring(XDR *, char **);
0275
0276 extern unsigned long xdr_sizeof(xdrproc_t, void *);
0277
0278 #define xdr_rpcprog xdr_u_int32
0279 #define xdr_rpcvers xdr_u_int32
0280 #define xdr_rpcprot xdr_u_int32
0281 #define xdr_rpcproc xdr_u_int32
0282 #define xdr_rpcport xdr_u_int32
0283
0284
0285
0286
0287
0288 #define MAX_NETOBJ_SZ 2048
0289 struct netobj {
0290 u_int n_len;
0291 char *n_bytes;
0292 };
0293 typedef struct netobj netobj;
0294
0295 extern bool_t xdr_netobj(XDR *, struct netobj *);
0296
0297 extern bool_t xdr_int32(XDR *, int32_t *);
0298 extern bool_t xdr_u_int32(XDR *, uint32_t *);
0299
0300
0301
0302
0303
0304
0305
0306 extern void xdralloc_create(XDR *, enum xdr_op);
0307
0308
0309 extern void xdralloc_release(XDR *);
0310
0311
0312 extern caddr_t xdralloc_getdata(XDR *);
0313
0314
0315 extern void xdrmem_create(XDR *, caddr_t, u_int, enum xdr_op);
0316
0317
0318 extern void xdrstdio_create(XDR *, FILE *, enum xdr_op);
0319
0320
0321 extern void xdrrec_create(XDR *xdrs, u_int, u_int, caddr_t,
0322 int (*) (caddr_t, caddr_t, int),
0323 int (*) (caddr_t, caddr_t, int));
0324
0325
0326 extern bool_t xdrrec_endofrecord(XDR *, bool_t);
0327
0328
0329 extern bool_t xdrrec_skiprecord (XDR *xdrs);
0330
0331
0332 extern bool_t xdrrec_eof (XDR *xdrs);
0333
0334
0335 extern void xdr_free (xdrproc_t, void *);
0336 GSSRPC__END_DECLS
0337
0338 #endif