r1767: Checkin of workarea. Sorry Jelmer but this overwrites some of your changes
[samba.git] / source4 / build / pidl / eparser.h
1 /* Glue code for sticking code generated by pidl to ethereal. */
2
3 #ifndef _eparser_h
4 #define _eparser_h
5
6 #ifdef HAVE_CONFIG_H
7 #include "config.h"
8 #endif
9
10 #include <epan/dissectors/packet-dcerpc.h>
11 #include <epan/dissectors/packet-dcerpc-nt.h>
12
13 #define NDR_SCALARS 1
14 #define NDR_BUFFERS 2
15
16 #define LIBNDR_FLAG_BIGENDIAN  (1<<0)
17 #define LIBNDR_FLAG_NOALIGN    (1<<1)
18
19 #define LIBNDR_FLAG_STR_ASCII    (1<<2)
20 #define LIBNDR_FLAG_STR_LEN4     (1<<3)
21 #define LIBNDR_FLAG_STR_SIZE4    (1<<4)
22 #define LIBNDR_FLAG_STR_NOTERM   (1<<5)
23 #define LIBNDR_FLAG_STR_NULLTERM (1<<6)
24 #define LIBNDR_FLAG_STR_SIZE2    (1<<7)
25 #define LIBNDR_STRING_FLAGS      (0xFC)
26
27 #define LIBNDR_FLAG_REF_ALLOC    (1<<10)
28 #define LIBNDR_FLAG_REMAINING    (1<<11)
29 #define LIBNDR_FLAG_ALIGN2       (1<<12)
30 #define LIBNDR_FLAG_ALIGN4       (1<<13)
31 #define LIBNDR_FLAG_ALIGN8       (1<<14)
32
33 #define LIBNDR_ALIGN_FLAGS (LIBNDR_FLAG_ALIGN2|LIBNDR_FLAG_ALIGN4|LIBNDR_FLAG_ALIGN8)
34
35 #define LIBNDR_PRINT_ARRAY_HEX   (1<<15)
36 #define LIBNDR_PRINT_SET_VALUES  (1<<16)
37
38 /* used to force a section of IDL to be little-endian */
39 #define LIBNDR_FLAG_LITTLE_ENDIAN (1<<17)
40
41 #define NDR_ALLOC_SIZE(ndr, s, size) do { \
42     (s) = g_malloc(size); \
43     } while (0);
44
45 #define NDR_ALLOC_N_SIZE(ndr, s, n, elsize) do { \
46     if ((n) == 0) { \
47         (s) = NULL; \
48     } else { \
49         (s) = g_malloc((n) * elsize); \
50     } \
51 } while (0)
52
53 #define NDR_ALLOC_N(ndr, s, n) NDR_ALLOC_N_SIZE(ndr, s, n, sizeof(*(s)))
54 #define NDR_ALLOC(ndr, s) NDR_ALLOC_SIZE(ndr, s, sizeof(*(s)))
55
56 /* zero a structure */
57 #define ZERO_STRUCT(x) memset((char *)&(x), 0, sizeof(x))
58
59 /* zero a structure given a pointer to the structure */
60 #define ZERO_STRUCTP(x) do { if ((x) != NULL) memset((char *)(x), 0, sizeof(*(x))); } while(0)
61
62 struct ndr_ofs_list {
63         guint32 offset;
64         struct ndr_ofs_list *next;
65 };
66
67 struct ndr_pull {
68         tvbuff_t *tvb;
69         int offset;
70         packet_info *pinfo;
71         guint8 *drep;
72         struct ndr_ofs_list *ofs_list;
73         int flags;
74 };
75
76 typedef int NTSTATUS;
77 typedef guint64 uint64;
78 typedef guint32 uint32;
79 typedef guint16 uint16;
80 typedef guint8 uint8;
81 typedef gint64 int64;
82 typedef gint32 int32;
83 typedef gint16 int16;
84 typedef gint8 int8;
85 typedef guint64 NTTIME;
86 typedef guint64 HYPER_T;
87 #define dom_sid2 dom_sid
88
89 typedef void (*ndr_pull_flags_fn_t)(struct ndr_pull *, int ndr_flags, void *);
90
91 #include "packet-dcerpc-proto.h"
92 #include "glib.h"
93
94 struct ndr_pull *ndr_pull_init(tvbuff_t *tvb, int offset, packet_info *pinfo, guint8 *drep);
95
96 void ndr_pull_struct_start(struct ndr_pull *ndr);
97 void ndr_pull_struct_end(struct ndr_pull *ndr);
98 void ndr_pull_align(struct ndr_pull *ndr, int size);
99
100 void ndr_pull_uint8(struct ndr_pull *ndr, proto_tree *tree, int hf, uint8 *data);
101 void ndr_pull_uint16(struct ndr_pull *ndr, proto_tree *tree, int hf, uint16 *data);
102 void ndr_pull_uint32(struct ndr_pull *ndr, proto_tree *tree, int hf, uint32 *data);
103 void ndr_pull_uint64(struct ndr_pull *ndr, proto_tree *tree, int hf, uint64 *data);
104
105 void ndr_pull_int8(struct ndr_pull *ndr, proto_tree *tree, int hf, int8 *data);
106 void ndr_pull_int16(struct ndr_pull *ndr, proto_tree *tree, int hf, int16 *data);
107 void ndr_pull_int32(struct ndr_pull *ndr, proto_tree *tree, int hf, int32 *data);
108 void ndr_pull_int64(struct ndr_pull *ndr, proto_tree *tree, int hf, int64 *data);
109
110 void ndr_pull_array_uint8(struct ndr_pull *ndr, int ndr_flags, proto_tree *tree, char *name, int hf, void *data, int count);
111 void ndr_pull_array_uint16(struct ndr_pull *ndr, int ndr_flags, proto_tree *tree, char *name, int hf, void *data, int count);
112 void ndr_pull_array_uint32(struct ndr_pull *ndr, int ndr_flags, proto_tree *tree, char *name, int hf, void *data, int count);
113
114 void ndr_pull_array(struct ndr_pull *ndr, int ndr_flags, proto_tree *tree, 
115                     char *name, void *data, int size, int count, 
116                     void (*pull_fn)(struct ndr_pull *, int ndr_flags, 
117                                     proto_tree *tree, void *data));
118
119 void ndr_pull_relative(struct ndr_pull *ndr, void *data, int size,
120                        void (*fn)(struct ndr_pull *, int ndr_flags, 
121                                   char *name));
122
123 void ndr_pull_ptr(struct ndr_pull *ndr, proto_tree *tree, int hf, guint32 *ptr);
124
125 void ndr_pull_string(struct ndr_pull *ndr, int ndr_flags, proto_tree *tree, char **data);
126
127 void ndr_pull_NTTIME(struct ndr_pull *ndr, proto_tree *tree, int hf, NTTIME *data);
128
129 void ndr_pull_NTSTATUS(struct ndr_pull *ndr, proto_tree *tree, int hf, NTSTATUS *data);
130
131 void ndr_pull_HYPER_T(struct ndr_pull *ndr, proto_tree *tree, int hf, HYPER_T *data);
132
133 void ndr_pull_dom_sid2(struct ndr_pull *ndr, int ndr_flags, proto_tree *tree, struct dom_sid2 *data);
134
135 void ndr_pull_subcontext_flags_fn(struct ndr_pull *ndr, proto_tree *tree, size_t sub_size, void *data, void (*fn)(struct ndr_pull *, int ndr_flags, proto_tree *tree, void *data));
136
137 void ndr_pull_subcontext_header(struct ndr_pull *ndr, proto_tree *tree, size_t sub_size, struct ndr_pull *ndr2);
138
139 void ndr_pull_advance(struct ndr_pull *ndr, int offset);
140
141 proto_tree *get_subtree(proto_tree *tree, char *name, struct ndr_pull *ndr, gint ett);
142
143 void ndr_pull_subcontext(struct ndr_pull *ndr, struct ndr_pull *ndr2, guint32 size);
144
145 #endif /* _eparser_h */