git add -f bin/default/librpc/gen_ndr/packet-dcerpc-*
[metze/samba/wip.git] / bin / default / librpc / gen_ndr / packet-dcerpc-dfsblobs.c
1 /* DO NOT EDIT
2         This filter was automatically generated
3         from /home/metze/devel/samba/4.0/master4-franky/librpc/idl/dfsblobs.idl and /home/metze/devel/samba/4.0/master4-franky/librpc/idl/dfsblobs.cnf.
4         
5         Pidl is a perl based IDL compiler for DCE/RPC idl files.
6         It is maintained by the Samba team, not the Wireshark team.
7         Instructions on how to download and install Pidl can be
8         found at http://wiki.wireshark.org/Pidl
9
10         $Id$
11 */
12
13
14 #include "config.h"
15 #ifdef _MSC_VER
16 #pragma warning(disable:4005)
17 #pragma warning(disable:4013)
18 #pragma warning(disable:4018)
19 #pragma warning(disable:4101)
20 #endif
21
22 #include <glib.h>
23 #include <string.h>
24 #include <epan/packet.h>
25
26 #include "packet-dcerpc.h"
27 #include "packet-dcerpc-nt.h"
28 #include "packet-windows-common.h"
29 #include "packet-dcerpc-dfsblobs.h"
30
31 /* Ett declarations */
32 static gint ett_dcerpc_dfsblobs = -1;
33 static gint ett_dfsblobs_DFS_HEADER_FLAG = -1;
34 static gint ett_dfsblobs_dfs_referral_v1 = -1;
35 static gint ett_dfsblobs_dfs_referral_v2 = -1;
36 static gint ett_dfsblobs_dfs_normal_referral = -1;
37 static gint ett_dfsblobs_dfs_domain_referral = -1;
38 static gint ett_dfsblobs_dfs_referral = -1;
39 static gint ett_dfsblobs_dfs_padding = -1;
40 static gint ett_dfsblobs_dfs_referral_v3 = -1;
41 static gint ett_dfsblobs_dfs_referral_version = -1;
42 static gint ett_dfsblobs_dfs_referral_type = -1;
43 static gint ett_dfsblobs_dfs_referral_resp = -1;
44 static gint ett_dfsblobs_dfs_GetDFSReferral_in = -1;
45
46
47 /* Header field declarations */
48 static gint hf_dfsblobs_dfs_referral_version_v4 = -1;
49 static gint hf_dfsblobs_dfs_domain_referral_special_name = -1;
50 static gint hf_dfsblobs_dfs_referral_v3_ttl = -1;
51 static gint hf_dfsblobs_dfs_referral_v2_server_type = -1;
52 static gint hf_dfsblobs_dfs_referral_v1_server_type = -1;
53 static gint hf_dfsblobs_dfs_normal_referral_netw_address = -1;
54 static gint hf_dfsblobs_dfs_referral_v2_proximity = -1;
55 static gint hf_dfsblobs_dfs_referral_v2_size = -1;
56 static gint hf_dfsblobs_dfs_referral_v3_server_type = -1;
57 static gint hf_dfsblobs_DFS_HEADER_FLAG_DFS_HEADER_FLAG_REFERAL_SVR = -1;
58 static gint hf_dfsblobs_dfs_referral_resp_path_consumed = -1;
59 static gint hf_dfsblobs_dfs_referral_version_v3 = -1;
60 static gint hf_dfsblobs_dfs_referral_v3_referrals = -1;
61 static gint hf_dfsblobs_dfs_referral_v1_entry_flags = -1;
62 static gint hf_dfsblobs_dfs_referral_resp_referral_entries = -1;
63 static gint hf_dfsblobs_dfs_referral_type_referral = -1;
64 static gint hf_dfsblobs_dfs_referral_r1 = -1;
65 static gint hf_dfsblobs_dfs_referral_version_v1 = -1;
66 static gint hf_dfsblobs_dfs_GetDFSReferral_req = -1;
67 static gint hf_dfsblobs_dfs_referral_v1_share_name = -1;
68 static gint hf_dfsblobs_dfs_referral_v2_netw_address = -1;
69 static gint hf_dfsblobs_dfs_domain_referral_expanded_names_ = -1;
70 static gint hf_dfsblobs_dfs_referral_type_version = -1;
71 static gint hf_dfsblobs_dfs_domain_referral_nb_expanded_names = -1;
72 static gint hf_dfsblobs_opnum = -1;
73 static gint hf_dfsblobs_dfs_GetDFSReferral_in_max_referral_level = -1;
74 static gint hf_dfsblobs_dfs_referral_v2_DFS_alt_path = -1;
75 static gint hf_dfsblobs_dfs_domain_referral_expanded_names = -1;
76 static gint hf_dfsblobs_dfs_referral_r2 = -1;
77 static gint hf_dfsblobs_dfs_referral_v3_service_site_guid = -1;
78 static gint hf_dfsblobs_dfs_GetDFSReferral_in_servername = -1;
79 static gint hf_dfsblobs_dfs_referral_resp_nb_referrals = -1;
80 static gint hf_dfsblobs_dfs_normal_referral_DFS_alt_path = -1;
81 static gint hf_dfsblobs_DFS_HEADER_FLAG_DFS_HEADER_FLAG_STORAGE_SVR = -1;
82 static gint hf_dfsblobs_dfs_referral_v1_size = -1;
83 static gint hf_dfsblobs_dfs_padding_value = -1;
84 static gint hf_dfsblobs_dfs_referral_resp_header_flags = -1;
85 static gint hf_dfsblobs_dfs_normal_referral_DFS_path = -1;
86 static gint hf_dfsblobs_dfs_referral_v3_entry_flags = -1;
87 static gint hf_dfsblobs_dfs_referral_v3_size = -1;
88 static gint hf_dfsblobs_dfs_GetDFSReferral_resp = -1;
89 static gint hf_dfsblobs_dfs_referral_v2_entry_flags = -1;
90 static gint hf_dfsblobs_dfs_referral_version_v2 = -1;
91 static gint hf_dfsblobs_dfs_referral_v2_ttl = -1;
92 static gint hf_dfsblobs_dfs_referral_v2_DFS_path = -1;
93 static gint hf_dfsblobs_DFS_HEADER_FLAG_DFS_HEADER_FLAG_TARGET_BCK = -1;
94
95 static gint proto_dcerpc_dfsblobs = -1;
96 /* Version information */
97
98
99 static e_uuid_t uuid_dcerpc_dfsblobs = {
100         0x12345778, 0x1234, 0xabcd,
101         { 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x", 0x }
102 };
103 static guint16 ver_dcerpc_dfsblobs = 0;
104
105 static const true_false_string DFS_HEADER_FLAG_DFS_HEADER_FLAG_REFERAL_SVR_tfs = {
106    "DFS_HEADER_FLAG_REFERAL_SVR is SET",
107    "DFS_HEADER_FLAG_REFERAL_SVR is NOT SET",
108 };
109 static const true_false_string DFS_HEADER_FLAG_DFS_HEADER_FLAG_STORAGE_SVR_tfs = {
110    "DFS_HEADER_FLAG_STORAGE_SVR is SET",
111    "DFS_HEADER_FLAG_STORAGE_SVR is NOT SET",
112 };
113 static const true_false_string DFS_HEADER_FLAG_DFS_HEADER_FLAG_TARGET_BCK_tfs = {
114    "DFS_HEADER_FLAG_TARGET_BCK is SET",
115    "DFS_HEADER_FLAG_TARGET_BCK is NOT SET",
116 };
117 const value_string dfsblobs_DFS_SERVER_TYPE_vals[] = {
118         { DFS_SERVER_NON_ROOT, "DFS_SERVER_NON_ROOT" },
119         { DFS_SERVER_ROOT, "DFS_SERVER_ROOT" },
120 { 0, NULL }
121 };
122 const value_string dfsblobs_DFS_FLAGS_REFERRAL_vals[] = {
123         { DFS_FLAG_REFERRAL_DOMAIN_RESP, "DFS_FLAG_REFERRAL_DOMAIN_RESP" },
124         { DFS_FLAG_REFERRAL_FIRST_TARGET_SET, "DFS_FLAG_REFERRAL_FIRST_TARGET_SET" },
125 { 0, NULL }
126 };
127 static int dfsblobs_dissect_element_dfs_referral_v1_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
128 static int dfsblobs_dissect_element_dfs_referral_v1_server_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
129 static int dfsblobs_dissect_element_dfs_referral_v1_entry_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
130 static int dfsblobs_dissect_element_dfs_referral_v1_share_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
131 static int dfsblobs_dissect_element_dfs_referral_v1_share_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
132 static int dfsblobs_dissect_element_dfs_referral_v2_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
133 static int dfsblobs_dissect_element_dfs_referral_v2_server_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
134 static int dfsblobs_dissect_element_dfs_referral_v2_entry_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
135 static int dfsblobs_dissect_element_dfs_referral_v2_proximity(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
136 static int dfsblobs_dissect_element_dfs_referral_v2_ttl(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
137 static int dfsblobs_dissect_element_dfs_referral_v2_DFS_path(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
138 static int dfsblobs_dissect_element_dfs_referral_v2_DFS_path_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
139 static int dfsblobs_dissect_element_dfs_referral_v2_DFS_alt_path(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
140 static int dfsblobs_dissect_element_dfs_referral_v2_DFS_alt_path_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
141 static int dfsblobs_dissect_element_dfs_referral_v2_netw_address(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
142 static int dfsblobs_dissect_element_dfs_referral_v2_netw_address_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
143 static int dfsblobs_dissect_element_dfs_normal_referral_DFS_path(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
144 static int dfsblobs_dissect_element_dfs_normal_referral_DFS_path_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
145 static int dfsblobs_dissect_element_dfs_normal_referral_DFS_alt_path(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
146 static int dfsblobs_dissect_element_dfs_normal_referral_DFS_alt_path_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
147 static int dfsblobs_dissect_element_dfs_normal_referral_netw_address(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
148 static int dfsblobs_dissect_element_dfs_normal_referral_netw_address_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
149 static int dfsblobs_dissect_element_dfs_domain_referral_special_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
150 static int dfsblobs_dissect_element_dfs_domain_referral_special_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
151 static int dfsblobs_dissect_element_dfs_domain_referral_nb_expanded_names(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
152 static int dfsblobs_dissect_element_dfs_domain_referral_expanded_names(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
153 static int dfsblobs_dissect_element_dfs_domain_referral_expanded_names_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
154 static int dfsblobs_dissect_element_dfs_domain_referral_expanded_names__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
155 static int dfsblobs_dissect_element_dfs_referral_r1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
156 static int dfsblobs_dissect_element_dfs_referral_r2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
157 static int dfsblobs_dissect_element_dfs_padding_value(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
158 static int dfsblobs_dissect_element_dfs_padding_value_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
159 static int dfsblobs_dissect_element_dfs_referral_v3_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, g *size);
160 static int dfsblobs_dissect_element_dfs_referral_v3_server_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
161 static int dfsblobs_dissect_element_dfs_referral_v3_entry_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, guint16 *entry_flags);
162 static int dfsblobs_dissect_element_dfs_referral_v3_ttl(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
163 static int dfsblobs_dissect_element_dfs_referral_v3_referrals(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_,  *);
164 static int dfsblobs_dissect_element_dfs_referral_v3_service_site_guid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_,  *);
165 static int dfsblobs_dissect_element_dfs_referral_version_v1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
166 static int dfsblobs_dissect_element_dfs_referral_version_v2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
167 static int dfsblobs_dissect_element_dfs_referral_version_v3(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
168 static int dfsblobs_dissect_element_dfs_referral_version_v4(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
169 static int dfsblobs_dissect_element_dfs_referral_type_version(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, g *version);
170 static int dfsblobs_dissect_element_dfs_referral_type_referral(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, g *version);
171 static int dfsblobs_dissect_element_dfs_referral_resp_path_consumed(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
172 static int dfsblobs_dissect_element_dfs_referral_resp_nb_referrals(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
173 static int dfsblobs_dissect_element_dfs_referral_resp_header_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
174 static int dfsblobs_dissect_element_dfs_referral_resp_referral_entries(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
175 static int dfsblobs_dissect_element_dfs_referral_resp_referral_entries_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
176 static int dfsblobs_dissect_element_dfs_GetDFSReferral_in_max_referral_level(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
177 static int dfsblobs_dissect_element_dfs_GetDFSReferral_in_servername(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
178 static int dfsblobs_dissect_element_dfs_GetDFSReferral_req(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
179 static int dfsblobs_dissect_element_dfs_GetDFSReferral_resp(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
180 static int dfsblobs_dissect_element_dfs_GetDFSReferral_resp_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
181
182
183 /* IDL: bitmap { */
184 /* IDL:         DFS_HEADER_FLAG_REFERAL_SVR =  0x00000001 , */
185 /* IDL:         DFS_HEADER_FLAG_STORAGE_SVR =  0x00000002 , */
186 /* IDL:         DFS_HEADER_FLAG_TARGET_BCK =  0x00000004 , */
187 /* IDL: } */
188
189 int
190 dfsblobs_dissect_bitmap_DFS_HEADER_FLAG(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
191 {
192         proto_item *item = NULL;
193         proto_tree *tree = NULL;
194
195         guint32 flags;
196         ALIGN_TO_4_BYTES;
197
198         if (parent_tree) {
199                 item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, DREP_ENC_INTEGER(drep));
200                 tree = proto_item_add_subtree(item,ett_dfsblobs_DFS_HEADER_FLAG);
201         }
202
203         offset = dissect_ndr_uint32(tvb, offset, pinfo, NULL, drep, -1, &flags);
204         proto_item_append_text(item, ": ");
205
206         if (!flags)
207                 proto_item_append_text(item, "(No values set)");
208
209         proto_tree_add_boolean(tree, hf_dfsblobs_DFS_HEADER_FLAG_DFS_HEADER_FLAG_REFERAL_SVR, tvb, offset-4, 4, flags);
210         if (flags&( 0x00000001 )){
211                 proto_item_append_text(item, "DFS_HEADER_FLAG_REFERAL_SVR");
212                 if (flags & (~( 0x00000001 )))
213                         proto_item_append_text(item, ", ");
214         }
215         flags&=(~( 0x00000001 ));
216
217         proto_tree_add_boolean(tree, hf_dfsblobs_DFS_HEADER_FLAG_DFS_HEADER_FLAG_STORAGE_SVR, tvb, offset-4, 4, flags);
218         if (flags&( 0x00000002 )){
219                 proto_item_append_text(item, "DFS_HEADER_FLAG_STORAGE_SVR");
220                 if (flags & (~( 0x00000002 )))
221                         proto_item_append_text(item, ", ");
222         }
223         flags&=(~( 0x00000002 ));
224
225         proto_tree_add_boolean(tree, hf_dfsblobs_DFS_HEADER_FLAG_DFS_HEADER_FLAG_TARGET_BCK, tvb, offset-4, 4, flags);
226         if (flags&( 0x00000004 )){
227                 proto_item_append_text(item, "DFS_HEADER_FLAG_TARGET_BCK");
228                 if (flags & (~( 0x00000004 )))
229                         proto_item_append_text(item, ", ");
230         }
231         flags&=(~( 0x00000004 ));
232
233         if (flags) {
234                 proto_item_append_text(item, "Unknown bitmap value 0x%x", flags);
235         }
236
237         return offset;
238 }
239
240
241 /* IDL: enum { */
242 /* IDL:         DFS_SERVER_NON_ROOT=0x0000, */
243 /* IDL:         DFS_SERVER_ROOT=0x0001, */
244 /* IDL: } */
245
246 int
247 dfsblobs_dissect_enum_DFS_SERVER_TYPE(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 *param _U_)
248 {
249         guint16 parameter=0;
250         if(param){
251                 parameter=(guint16)*param;
252         }
253         offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, hf_index, &parameter);
254         if(param){
255                 *param=(guint32)parameter;
256         }
257         return offset;
258 }
259
260
261 /* IDL: enum { */
262 /* IDL:         DFS_FLAG_REFERRAL_DOMAIN_RESP=0x0002, */
263 /* IDL:         DFS_FLAG_REFERRAL_FIRST_TARGET_SET=0x0004, */
264 /* IDL: } */
265
266 int
267 dfsblobs_dissect_enum_DFS_FLAGS_REFERRAL(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 *param _U_)
268 {
269         guint16 parameter=0;
270         if(param){
271                 parameter=(guint16)*param;
272         }
273         offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, hf_index, &parameter);
274         if(param){
275                 *param=(guint32)parameter;
276         }
277         return offset;
278 }
279
280
281 /* IDL: struct { */
282 /* IDL:         uint16 size; */
283 /* IDL:         uint16 server_type; */
284 /* IDL:         uint16 entry_flags; */
285 /* IDL:         [unique(1)] [flag(LIBNDR_FLAG_STR_NULLTERM|LIBNDR_FLAG_ALIGN2)] string *share_name; */
286 /* IDL: } */
287
288 static int
289 dfsblobs_dissect_element_dfs_referral_v1_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
290 {
291         offset = PIDL_dissect_uint16(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_referral_v1_size, 0);
292
293         return offset;
294 }
295
296 static int
297 dfsblobs_dissect_element_dfs_referral_v1_server_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
298 {
299         offset = PIDL_dissect_uint16(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_referral_v1_server_type, 0);
300
301         return offset;
302 }
303
304 static int
305 dfsblobs_dissect_element_dfs_referral_v1_entry_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
306 {
307         offset = PIDL_dissect_uint16(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_referral_v1_entry_flags, 0);
308
309         return offset;
310 }
311
312 static int
313 dfsblobs_dissect_element_dfs_referral_v1_share_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
314 {
315         offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, drep, dfsblobs_dissect_element_dfs_referral_v1_share_name_, NDR_POINTER_UNIQUE, "Pointer to Share Name (string)",hf_dfsblobs_dfs_referral_v1_share_name);
316
317         return offset;
318 }
319
320 static int
321 dfsblobs_dissect_element_dfs_referral_v1_share_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
322 {
323         offset = dissect_null_term_wstring(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_referral_v1_share_name , 0);
324
325         return offset;
326 }
327
328 int
329 dfsblobs_dissect_struct_dfs_referral_v1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
330 {
331         proto_item *item = NULL;
332         proto_tree *tree = NULL;
333         dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
334         int old_offset;
335
336         ALIGN_TO_5_BYTES;
337
338         old_offset = offset;
339
340         if (parent_tree) {
341                 item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
342                 tree = proto_item_add_subtree(item, ett_dfsblobs_dfs_referral_v1);
343         }
344         
345         offset = dfsblobs_dissect_element_dfs_referral_v1_size(tvb, offset, pinfo, tree, drep);
346
347         offset = dfsblobs_dissect_element_dfs_referral_v1_server_type(tvb, offset, pinfo, tree, drep);
348
349         offset = dfsblobs_dissect_element_dfs_referral_v1_entry_flags(tvb, offset, pinfo, tree, drep);
350
351         offset = dfsblobs_dissect_element_dfs_referral_v1_share_name(tvb, offset, pinfo, tree, drep);
352
353
354         proto_item_set_len(item, offset-old_offset);
355
356
357         if (di->call_data->flags & DCERPC_IS_NDR64) {
358                 ALIGN_TO_5_BYTES;
359         }
360
361         return offset;
362 }
363
364
365 /* IDL: struct { */
366 /* IDL:         uint16 size; */
367 /* IDL:         DFS_SERVER_TYPE server_type; */
368 /* IDL:         DFS_FLAGS_REFERRAL entry_flags; */
369 /* IDL:         uint32 proximity; */
370 /* IDL:         uint32 ttl; */
371 /* IDL:         [flag(LIBNDR_FLAG_STR_NULLTERM|LIBNDR_FLAG_ALIGN2)] [relative_short(1)] string *DFS_path; */
372 /* IDL:         [flag(LIBNDR_FLAG_STR_NULLTERM|LIBNDR_FLAG_ALIGN2)] [relative_short(1)] string *DFS_alt_path; */
373 /* IDL:         [flag(LIBNDR_FLAG_STR_NULLTERM|LIBNDR_FLAG_ALIGN2)] [relative_short(1)] string *netw_address; */
374 /* IDL: } */
375
376 static int
377 dfsblobs_dissect_element_dfs_referral_v2_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
378 {
379         offset = PIDL_dissect_uint16(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_referral_v2_size, 0);
380
381         return offset;
382 }
383
384 static int
385 dfsblobs_dissect_element_dfs_referral_v2_server_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
386 {
387         offset = dfsblobs_dissect_enum_DFS_SERVER_TYPE(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_referral_v2_server_type, 0);
388
389         return offset;
390 }
391
392 static int
393 dfsblobs_dissect_element_dfs_referral_v2_entry_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
394 {
395         offset = dfsblobs_dissect_enum_DFS_FLAGS_REFERRAL(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_referral_v2_entry_flags, 0);
396
397         return offset;
398 }
399
400 static int
401 dfsblobs_dissect_element_dfs_referral_v2_proximity(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
402 {
403         offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_referral_v2_proximity, 0);
404
405         return offset;
406 }
407
408 static int
409 dfsblobs_dissect_element_dfs_referral_v2_ttl(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
410 {
411         offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_referral_v2_ttl, 0);
412
413         return offset;
414 }
415
416 static int
417 dfsblobs_dissect_element_dfs_referral_v2_DFS_path(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
418 {
419         offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, drep, dfsblobs_dissect_element_dfs_referral_v2_DFS_path_, , "Pointer to Dfs Path (string)",hf_dfsblobs_dfs_referral_v2_DFS_path);
420
421         return offset;
422 }
423
424 static int
425 dfsblobs_dissect_element_dfs_referral_v2_DFS_path_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
426 {
427         offset = dissect_null_term_wstring(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_referral_v2_DFS_path , 0);
428
429         return offset;
430 }
431
432 static int
433 dfsblobs_dissect_element_dfs_referral_v2_DFS_alt_path(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
434 {
435         offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, drep, dfsblobs_dissect_element_dfs_referral_v2_DFS_alt_path_, , "Pointer to Dfs Alt Path (string)",hf_dfsblobs_dfs_referral_v2_DFS_alt_path);
436
437         return offset;
438 }
439
440 static int
441 dfsblobs_dissect_element_dfs_referral_v2_DFS_alt_path_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
442 {
443         offset = dissect_null_term_wstring(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_referral_v2_DFS_alt_path , 0);
444
445         return offset;
446 }
447
448 static int
449 dfsblobs_dissect_element_dfs_referral_v2_netw_address(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
450 {
451         offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, drep, dfsblobs_dissect_element_dfs_referral_v2_netw_address_, , "Pointer to Netw Address (string)",hf_dfsblobs_dfs_referral_v2_netw_address);
452
453         return offset;
454 }
455
456 static int
457 dfsblobs_dissect_element_dfs_referral_v2_netw_address_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
458 {
459         offset = dissect_null_term_wstring(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_referral_v2_netw_address , 0);
460
461         return offset;
462 }
463
464 int
465 dfsblobs_dissect_struct_dfs_referral_v2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
466 {
467         proto_item *item = NULL;
468         proto_tree *tree = NULL;
469         dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
470         int old_offset;
471
472         ALIGN_TO_5_BYTES;
473
474         old_offset = offset;
475
476         if (parent_tree) {
477                 item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
478                 tree = proto_item_add_subtree(item, ett_dfsblobs_dfs_referral_v2);
479         }
480         
481         offset = dfsblobs_dissect_element_dfs_referral_v2_size(tvb, offset, pinfo, tree, drep);
482
483         offset = dfsblobs_dissect_element_dfs_referral_v2_server_type(tvb, offset, pinfo, tree, drep);
484
485         offset = dfsblobs_dissect_element_dfs_referral_v2_entry_flags(tvb, offset, pinfo, tree, drep);
486
487         offset = dfsblobs_dissect_element_dfs_referral_v2_proximity(tvb, offset, pinfo, tree, drep);
488
489         offset = dfsblobs_dissect_element_dfs_referral_v2_ttl(tvb, offset, pinfo, tree, drep);
490
491         offset = dfsblobs_dissect_element_dfs_referral_v2_DFS_path(tvb, offset, pinfo, tree, drep);
492
493         offset = dfsblobs_dissect_element_dfs_referral_v2_DFS_alt_path(tvb, offset, pinfo, tree, drep);
494
495         offset = dfsblobs_dissect_element_dfs_referral_v2_netw_address(tvb, offset, pinfo, tree, drep);
496
497
498         proto_item_set_len(item, offset-old_offset);
499
500
501         if (di->call_data->flags & DCERPC_IS_NDR64) {
502                 ALIGN_TO_5_BYTES;
503         }
504
505         return offset;
506 }
507
508
509 /* IDL: struct { */
510 /* IDL:         [flag(LIBNDR_FLAG_STR_NULLTERM|LIBNDR_FLAG_ALIGN2)] [relative_short(1)] string *DFS_path; */
511 /* IDL:         [flag(LIBNDR_FLAG_STR_NULLTERM|LIBNDR_FLAG_ALIGN2)] [relative_short(1)] string *DFS_alt_path; */
512 /* IDL:         [flag(LIBNDR_FLAG_STR_NULLTERM|LIBNDR_FLAG_ALIGN2)] [relative_short(1)] string *netw_address; */
513 /* IDL: } */
514
515 static int
516 dfsblobs_dissect_element_dfs_normal_referral_DFS_path(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
517 {
518         offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, drep, dfsblobs_dissect_element_dfs_normal_referral_DFS_path_, , "Pointer to Dfs Path (string)",hf_dfsblobs_dfs_normal_referral_DFS_path);
519
520         return offset;
521 }
522
523 static int
524 dfsblobs_dissect_element_dfs_normal_referral_DFS_path_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
525 {
526         offset = dissect_null_term_wstring(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_normal_referral_DFS_path , 0);
527
528         return offset;
529 }
530
531 static int
532 dfsblobs_dissect_element_dfs_normal_referral_DFS_alt_path(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
533 {
534         offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, drep, dfsblobs_dissect_element_dfs_normal_referral_DFS_alt_path_, , "Pointer to Dfs Alt Path (string)",hf_dfsblobs_dfs_normal_referral_DFS_alt_path);
535
536         return offset;
537 }
538
539 static int
540 dfsblobs_dissect_element_dfs_normal_referral_DFS_alt_path_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
541 {
542         offset = dissect_null_term_wstring(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_normal_referral_DFS_alt_path , 0);
543
544         return offset;
545 }
546
547 static int
548 dfsblobs_dissect_element_dfs_normal_referral_netw_address(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
549 {
550         offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, drep, dfsblobs_dissect_element_dfs_normal_referral_netw_address_, , "Pointer to Netw Address (string)",hf_dfsblobs_dfs_normal_referral_netw_address);
551
552         return offset;
553 }
554
555 static int
556 dfsblobs_dissect_element_dfs_normal_referral_netw_address_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
557 {
558         offset = dissect_null_term_wstring(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_normal_referral_netw_address , 0);
559
560         return offset;
561 }
562
563 int
564 dfsblobs_dissect_struct_dfs_normal_referral(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
565 {
566         proto_item *item = NULL;
567         proto_tree *tree = NULL;
568         dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
569         int old_offset;
570
571         ALIGN_TO_5_BYTES;
572
573         old_offset = offset;
574
575         if (parent_tree) {
576                 item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
577                 tree = proto_item_add_subtree(item, ett_dfsblobs_dfs_normal_referral);
578         }
579         
580         offset = dfsblobs_dissect_element_dfs_normal_referral_DFS_path(tvb, offset, pinfo, tree, drep);
581
582         offset = dfsblobs_dissect_element_dfs_normal_referral_DFS_alt_path(tvb, offset, pinfo, tree, drep);
583
584         offset = dfsblobs_dissect_element_dfs_normal_referral_netw_address(tvb, offset, pinfo, tree, drep);
585
586
587         proto_item_set_len(item, offset-old_offset);
588
589
590         if (di->call_data->flags & DCERPC_IS_NDR64) {
591                 ALIGN_TO_5_BYTES;
592         }
593
594         return offset;
595 }
596
597
598 /* IDL: struct { */
599 /* IDL:         [flag(LIBNDR_FLAG_STR_NULLTERM|LIBNDR_FLAG_ALIGN2)] [relative_short(1)] string *special_name; */
600 /* IDL:         uint16 nb_expanded_names; */
601 /* IDL:         [subcontext(0)] [flag(LIBNDR_FLAG_REMAINING|LIBNDR_FLAG_STR_NULLTERM)] [relative_short(1)] string_array *expanded_names; */
602 /* IDL: } */
603
604 static int
605 dfsblobs_dissect_element_dfs_domain_referral_special_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
606 {
607         offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, drep, dfsblobs_dissect_element_dfs_domain_referral_special_name_, , "Pointer to Special Name (string)",hf_dfsblobs_dfs_domain_referral_special_name);
608
609         return offset;
610 }
611
612 static int
613 dfsblobs_dissect_element_dfs_domain_referral_special_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
614 {
615         offset = dissect_null_term_wstring(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_domain_referral_special_name , 0);
616
617         return offset;
618 }
619
620 static int
621 dfsblobs_dissect_element_dfs_domain_referral_nb_expanded_names(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
622 {
623         offset = PIDL_dissect_uint16(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_domain_referral_nb_expanded_names, 0);
624
625         return offset;
626 }
627
628 static int
629 dfsblobs_dissect_element_dfs_domain_referral_expanded_names(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
630 {
631         offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, drep, dfsblobs_dissect_element_dfs_domain_referral_expanded_names_, , "Pointer to Expanded Names (string_array)",hf_dfsblobs_dfs_domain_referral_expanded_names);
632
633         return offset;
634 }
635
636 static int
637 dfsblobs_dissect_element_dfs_domain_referral_expanded_names_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
638 {
639         dcerpc_info *di = (dcerpc_info*)pinfo->private_data;
640         guint0 size;
641         int conformant = di->conformant_run;
642         tvbuff_t *subtvb;
643
644         if (!conformant) {
645                 guint32 saved_flags = di->call_data->flags;
646                 offset = dissect_ndr_uint0(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_domain_referral_expanded_names_, &size);
647                 di->call_data->flags &= ~DCERPC_IS_NDR64;
648                 subtvb = tvb_new_subset(tvb, offset, size, -1);
649                 dfsblobs_dissect_element_dfs_domain_referral_expanded_names__(subtvb, 0, pinfo, tree, drep);
650                 offset += size;
651                 di->call_data->flags = saved_flags;
652         }
653
654         return offset;
655 }
656
657 static int
658 dfsblobs_dissect_element_dfs_domain_referral_expanded_names__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
659 {
660         offset = dfsblobs_dissect_struct_string_array(tvb,offset,pinfo,tree,drep,hf_dfsblobs_dfs_domain_referral_expanded_names,0);
661
662         return offset;
663 }
664
665 int
666 dfsblobs_dissect_struct_dfs_domain_referral(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
667 {
668         proto_item *item = NULL;
669         proto_tree *tree = NULL;
670         dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
671         int old_offset;
672
673         ALIGN_TO_5_BYTES;
674
675         old_offset = offset;
676
677         if (parent_tree) {
678                 item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
679                 tree = proto_item_add_subtree(item, ett_dfsblobs_dfs_domain_referral);
680         }
681         
682         offset = dfsblobs_dissect_element_dfs_domain_referral_special_name(tvb, offset, pinfo, tree, drep);
683
684         offset = dfsblobs_dissect_element_dfs_domain_referral_nb_expanded_names(tvb, offset, pinfo, tree, drep);
685
686         offset = dfsblobs_dissect_element_dfs_domain_referral_expanded_names(tvb, offset, pinfo, tree, drep);
687
688
689         proto_item_set_len(item, offset-old_offset);
690
691
692         if (di->call_data->flags & DCERPC_IS_NDR64) {
693                 ALIGN_TO_5_BYTES;
694         }
695
696         return offset;
697 }
698
699
700 /* IDL: [nodiscriminant(1)] union { */
701 /* IDL: [case(0)] [case(0)] dfs_normal_referral r1; */
702 /* IDL: [case(2)] [case(2)] dfs_domain_referral r2; */
703 /* IDL: [default] ; */
704 /* IDL: } */
705
706 static int
707 dfsblobs_dissect_element_dfs_referral_r1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
708 {
709         offset = dfsblobs_dissect_struct_dfs_normal_referral(tvb,offset,pinfo,tree,drep,hf_dfsblobs_dfs_referral_r1,0);
710
711         return offset;
712 }
713
714 static int
715 dfsblobs_dissect_element_dfs_referral_r2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
716 {
717         offset = dfsblobs_dissect_struct_dfs_domain_referral(tvb,offset,pinfo,tree,drep,hf_dfsblobs_dfs_referral_r2,0);
718
719         return offset;
720 }
721
722 static int
723 dfsblobs_dissect_dfs_referral(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
724 {
725         proto_item *item = NULL;
726         proto_tree *tree = NULL;
727         int old_offset;
728         guint32 level = param;
729
730         old_offset = offset;
731         if (parent_tree) {
732                 item = proto_tree_add_text(parent_tree, tvb, offset, -1, "dfs_referral");
733                 tree = proto_item_add_subtree(item, ett_dfsblobs_dfs_referral);
734         }
735
736         switch(level) {
737                 case 0:
738                         offset = dfsblobs_dissect_element_dfs_referral_r1(tvb, offset, pinfo, tree, drep);
739                 break;
740
741                 case 2:
742                         offset = dfsblobs_dissect_element_dfs_referral_r2(tvb, offset, pinfo, tree, drep);
743                 break;
744
745                 default:
746                 break;
747         }
748         proto_item_set_len(item, offset-old_offset);
749
750
751         return offset;
752 }
753
754 /* IDL: [nodiscriminant(1)] union { */
755 /* IDL: [case(16)] [case(16)] uint8 value[16]; */
756 /* IDL: [default] ; */
757 /* IDL: } */
758
759 static int
760 dfsblobs_dissect_element_dfs_padding_value(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
761 {
762         int i;
763         for (i = 0; i < 16; i++)
764                 offset = dfsblobs_dissect_element_dfs_padding_value_(tvb, offset, pinfo, tree, drep);
765
766         return offset;
767 }
768
769 static int
770 dfsblobs_dissect_element_dfs_padding_value_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
771 {
772         offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_padding_value, 0);
773
774         return offset;
775 }
776
777 static int
778 dfsblobs_dissect_dfs_padding(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
779 {
780         proto_item *item = NULL;
781         proto_tree *tree = NULL;
782         int old_offset;
783         guint32 level = param;
784
785         old_offset = offset;
786         if (parent_tree) {
787                 item = proto_tree_add_text(parent_tree, tvb, offset, -1, "dfs_padding");
788                 tree = proto_item_add_subtree(item, ett_dfsblobs_dfs_padding);
789         }
790
791         switch(level) {
792                 case 16:
793                         offset = dfsblobs_dissect_element_dfs_padding_value(tvb, offset, pinfo, tree, drep);
794                 break;
795
796                 default:
797                 break;
798         }
799         proto_item_set_len(item, offset-old_offset);
800
801
802         return offset;
803 }
804
805 /* IDL: struct { */
806 /* IDL:         uint16 size; */
807 /* IDL:         DFS_SERVER_TYPE server_type; */
808 /* IDL:         DFS_FLAGS_REFERRAL entry_flags; */
809 /* IDL:         uint32 ttl; */
810 /* IDL:         [switch_is(entry_flags&DFS_FLAG_REFERRAL_DOMAIN_RESP)] dfs_referral referrals; */
811 /* IDL:         [switch_is(size-18)] dfs_padding service_site_guid; */
812 /* IDL: } */
813
814 static int
815 dfsblobs_dissect_element_dfs_referral_v3_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, g *size)
816 {
817         offset = PIDL_dissect_uint16(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_referral_v3_size, size);
818
819         return offset;
820 }
821
822 static int
823 dfsblobs_dissect_element_dfs_referral_v3_server_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
824 {
825         offset = dfsblobs_dissect_enum_DFS_SERVER_TYPE(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_referral_v3_server_type, 0);
826
827         return offset;
828 }
829
830 static int
831 dfsblobs_dissect_element_dfs_referral_v3_entry_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, guint16 *entry_flags)
832 {
833         offset = dfsblobs_dissect_enum_DFS_FLAGS_REFERRAL(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_referral_v3_entry_flags, entry_flags);
834
835         return offset;
836 }
837
838 static int
839 dfsblobs_dissect_element_dfs_referral_v3_ttl(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
840 {
841         offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_referral_v3_ttl, 0);
842
843         return offset;
844 }
845
846 static int
847 dfsblobs_dissect_element_dfs_referral_v3_referrals(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_,  *)
848 {
849         offset = dfsblobs_dissect_dfs_referral(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_referral_v3_referrals, *);
850
851         return offset;
852 }
853
854 static int
855 dfsblobs_dissect_element_dfs_referral_v3_service_site_guid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_,  *)
856 {
857         offset = dfsblobs_dissect_dfs_padding(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_referral_v3_service_site_guid, *);
858
859         return offset;
860 }
861
862 int
863 dfsblobs_dissect_struct_dfs_referral_v3(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
864 {
865         g size;
866         guint16 entry_flags;
867         proto_item *item = NULL;
868         proto_tree *tree = NULL;
869         dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
870         int old_offset;
871
872
873         old_offset = offset;
874
875         if (parent_tree) {
876                 item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
877                 tree = proto_item_add_subtree(item, ett_dfsblobs_dfs_referral_v3);
878         }
879         
880         offset = dfsblobs_dissect_element_dfs_referral_v3_size(tvb, offset, pinfo, tree, drep, &size);
881
882         offset = dfsblobs_dissect_element_dfs_referral_v3_server_type(tvb, offset, pinfo, tree, drep);
883
884         offset = dfsblobs_dissect_element_dfs_referral_v3_entry_flags(tvb, offset, pinfo, tree, drep, &entry_flags);
885
886         offset = dfsblobs_dissect_element_dfs_referral_v3_ttl(tvb, offset, pinfo, tree, drep);
887
888         offset = dfsblobs_dissect_element_dfs_referral_v3_referrals(tvb, offset, pinfo, tree, drep, &);
889
890         offset = dfsblobs_dissect_element_dfs_referral_v3_service_site_guid(tvb, offset, pinfo, tree, drep, &);
891
892
893         proto_item_set_len(item, offset-old_offset);
894
895
896         if (di->call_data->flags & DCERPC_IS_NDR64) {
897                 ALIGN_TO_5_BYTES;
898         }
899
900         return offset;
901 }
902
903
904 /* IDL: [nodiscriminant(1)] union { */
905 /* IDL: [case(1)] [case(1)] dfs_referral_v1 v1; */
906 /* IDL: [case(2)] [case(2)] dfs_referral_v2 v2; */
907 /* IDL: [case(3)] [case(3)] dfs_referral_v3 v3; */
908 /* IDL: [case(4)] [case(4)] dfs_referral_v3 v4; */
909 /* IDL: [default] ; */
910 /* IDL: } */
911
912 static int
913 dfsblobs_dissect_element_dfs_referral_version_v1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
914 {
915         offset = dfsblobs_dissect_struct_dfs_referral_v1(tvb,offset,pinfo,tree,drep,hf_dfsblobs_dfs_referral_version_v1,0);
916
917         return offset;
918 }
919
920 static int
921 dfsblobs_dissect_element_dfs_referral_version_v2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
922 {
923         offset = dfsblobs_dissect_struct_dfs_referral_v2(tvb,offset,pinfo,tree,drep,hf_dfsblobs_dfs_referral_version_v2,0);
924
925         return offset;
926 }
927
928 static int
929 dfsblobs_dissect_element_dfs_referral_version_v3(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
930 {
931         offset = dfsblobs_dissect_struct_dfs_referral_v3(tvb,offset,pinfo,tree,drep,hf_dfsblobs_dfs_referral_version_v3,0);
932
933         return offset;
934 }
935
936 static int
937 dfsblobs_dissect_element_dfs_referral_version_v4(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
938 {
939         offset = dfsblobs_dissect_struct_dfs_referral_v3(tvb,offset,pinfo,tree,drep,hf_dfsblobs_dfs_referral_version_v4,0);
940
941         return offset;
942 }
943
944 static int
945 dfsblobs_dissect_dfs_referral_version(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
946 {
947         proto_item *item = NULL;
948         proto_tree *tree = NULL;
949         int old_offset;
950         guint32 level = param;
951
952         old_offset = offset;
953         if (parent_tree) {
954                 item = proto_tree_add_text(parent_tree, tvb, offset, -1, "dfs_referral_version");
955                 tree = proto_item_add_subtree(item, ett_dfsblobs_dfs_referral_version);
956         }
957
958         switch(level) {
959                 case 1:
960                         offset = dfsblobs_dissect_element_dfs_referral_version_v1(tvb, offset, pinfo, tree, drep);
961                 break;
962
963                 case 2:
964                         offset = dfsblobs_dissect_element_dfs_referral_version_v2(tvb, offset, pinfo, tree, drep);
965                 break;
966
967                 case 3:
968                         offset = dfsblobs_dissect_element_dfs_referral_version_v3(tvb, offset, pinfo, tree, drep);
969                 break;
970
971                 case 4:
972                         offset = dfsblobs_dissect_element_dfs_referral_version_v4(tvb, offset, pinfo, tree, drep);
973                 break;
974
975                 default:
976                 break;
977         }
978         proto_item_set_len(item, offset-old_offset);
979
980
981         return offset;
982 }
983
984 /* IDL: struct { */
985 /* IDL:         uint16 version; */
986 /* IDL:         [switch_is(version)] dfs_referral_version referral; */
987 /* IDL: } */
988
989 static int
990 dfsblobs_dissect_element_dfs_referral_type_version(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, g *version)
991 {
992         offset = PIDL_dissect_uint16(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_referral_type_version, version);
993
994         return offset;
995 }
996
997 static int
998 dfsblobs_dissect_element_dfs_referral_type_referral(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, g *version)
999 {
1000         offset = dfsblobs_dissect_dfs_referral_version(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_referral_type_referral, *version);
1001
1002         return offset;
1003 }
1004
1005 int
1006 dfsblobs_dissect_struct_dfs_referral_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
1007 {
1008         g version;
1009         proto_item *item = NULL;
1010         proto_tree *tree = NULL;
1011         dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
1012         int old_offset;
1013
1014
1015         old_offset = offset;
1016
1017         if (parent_tree) {
1018                 item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
1019                 tree = proto_item_add_subtree(item, ett_dfsblobs_dfs_referral_type);
1020         }
1021         
1022         offset = dfsblobs_dissect_element_dfs_referral_type_version(tvb, offset, pinfo, tree, drep, &version);
1023
1024         offset = dfsblobs_dissect_element_dfs_referral_type_referral(tvb, offset, pinfo, tree, drep, &version);
1025
1026
1027         proto_item_set_len(item, offset-old_offset);
1028
1029
1030         if (di->call_data->flags & DCERPC_IS_NDR64) {
1031                 ALIGN_TO_5_BYTES;
1032         }
1033
1034         return offset;
1035 }
1036
1037
1038 /* IDL: struct { */
1039 /* IDL:         uint16 path_consumed; */
1040 /* IDL:         uint16 nb_referrals; */
1041 /* IDL:         DFS_HEADER_FLAG header_flags; */
1042 /* IDL:         dfs_referral_type referral_entries[nb_referrals]; */
1043 /* IDL: } */
1044
1045 static int
1046 dfsblobs_dissect_element_dfs_referral_resp_path_consumed(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
1047 {
1048         offset = PIDL_dissect_uint16(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_referral_resp_path_consumed, 0);
1049
1050         return offset;
1051 }
1052
1053 static int
1054 dfsblobs_dissect_element_dfs_referral_resp_nb_referrals(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
1055 {
1056         offset = PIDL_dissect_uint16(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_referral_resp_nb_referrals, 0);
1057
1058         return offset;
1059 }
1060
1061 static int
1062 dfsblobs_dissect_element_dfs_referral_resp_header_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
1063 {
1064         offset = dfsblobs_dissect_bitmap_DFS_HEADER_FLAG(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_referral_resp_header_flags, 0);
1065
1066         return offset;
1067 }
1068
1069 static int
1070 dfsblobs_dissect_element_dfs_referral_resp_referral_entries(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
1071 {
1072
1073         return offset;
1074 }
1075
1076 static int
1077 dfsblobs_dissect_element_dfs_referral_resp_referral_entries_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
1078 {
1079         offset = dfsblobs_dissect_struct_dfs_referral_type(tvb,offset,pinfo,tree,drep,hf_dfsblobs_dfs_referral_resp_referral_entries,0);
1080
1081         return offset;
1082 }
1083
1084 int
1085 dfsblobs_dissect_struct_dfs_referral_resp(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
1086 {
1087         proto_item *item = NULL;
1088         proto_tree *tree = NULL;
1089         dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
1090         int old_offset;
1091
1092         ALIGN_TO_5_BYTES;
1093
1094         old_offset = offset;
1095
1096         if (parent_tree) {
1097                 item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
1098                 tree = proto_item_add_subtree(item, ett_dfsblobs_dfs_referral_resp);
1099         }
1100         
1101         offset = dfsblobs_dissect_element_dfs_referral_resp_path_consumed(tvb, offset, pinfo, tree, drep);
1102
1103         offset = dfsblobs_dissect_element_dfs_referral_resp_nb_referrals(tvb, offset, pinfo, tree, drep);
1104
1105         offset = dfsblobs_dissect_element_dfs_referral_resp_header_flags(tvb, offset, pinfo, tree, drep);
1106
1107         offset = dfsblobs_dissect_element_dfs_referral_resp_referral_entries(tvb, offset, pinfo, tree, drep);
1108
1109
1110         proto_item_set_len(item, offset-old_offset);
1111
1112
1113         if (di->call_data->flags & DCERPC_IS_NDR64) {
1114                 ALIGN_TO_5_BYTES;
1115         }
1116
1117         return offset;
1118 }
1119
1120
1121 /* IDL: struct { */
1122 /* IDL:         uint16 max_referral_level; */
1123 /* IDL:         [flag(LIBNDR_FLAG_STR_NULLTERM|LIBNDR_FLAG_ALIGN2)] string servername; */
1124 /* IDL: } */
1125
1126 static int
1127 dfsblobs_dissect_element_dfs_GetDFSReferral_in_max_referral_level(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
1128 {
1129         offset = PIDL_dissect_uint16(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_GetDFSReferral_in_max_referral_level, 0);
1130
1131         return offset;
1132 }
1133
1134 static int
1135 dfsblobs_dissect_element_dfs_GetDFSReferral_in_servername(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
1136 {
1137         offset = dissect_null_term_wstring(tvb, offset, pinfo, tree, drep, hf_dfsblobs_dfs_GetDFSReferral_in_servername , 0);
1138
1139         return offset;
1140 }
1141
1142 int
1143 dfsblobs_dissect_struct_dfs_GetDFSReferral_in(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
1144 {
1145         proto_item *item = NULL;
1146         proto_tree *tree = NULL;
1147         dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
1148         int old_offset;
1149
1150         ALIGN_TO_4_BYTES;
1151
1152         old_offset = offset;
1153
1154         if (parent_tree) {
1155                 item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
1156                 tree = proto_item_add_subtree(item, ett_dfsblobs_dfs_GetDFSReferral_in);
1157         }
1158         
1159         offset = dfsblobs_dissect_element_dfs_GetDFSReferral_in_max_referral_level(tvb, offset, pinfo, tree, drep);
1160
1161         offset = dfsblobs_dissect_element_dfs_GetDFSReferral_in_servername(tvb, offset, pinfo, tree, drep);
1162
1163
1164         proto_item_set_len(item, offset-old_offset);
1165
1166
1167         if (di->call_data->flags & DCERPC_IS_NDR64) {
1168                 ALIGN_TO_4_BYTES;
1169         }
1170
1171         return offset;
1172 }
1173
1174 static int
1175 dfsblobs_dissect_element_dfs_GetDFSReferral_req(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
1176 {
1177         offset = dfsblobs_dissect_struct_dfs_GetDFSReferral_in(tvb,offset,pinfo,tree,drep,hf_dfsblobs_dfs_GetDFSReferral_req,0);
1178
1179         return offset;
1180 }
1181
1182 static int
1183 dfsblobs_dissect_element_dfs_GetDFSReferral_resp(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
1184 {
1185         offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, dfsblobs_dissect_element_dfs_GetDFSReferral_resp_, NDR_POINTER_REF, "Pointer to Resp (dfs_referral_resp)",hf_dfsblobs_dfs_GetDFSReferral_resp);
1186
1187         return offset;
1188 }
1189
1190 static int
1191 dfsblobs_dissect_element_dfs_GetDFSReferral_resp_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
1192 {
1193         offset = dfsblobs_dissect_struct_dfs_referral_resp(tvb,offset,pinfo,tree,drep,hf_dfsblobs_dfs_GetDFSReferral_resp,0);
1194
1195         return offset;
1196 }
1197
1198 /* IDL: void dfs_GetDFSReferral( */
1199 /* IDL: [in] dfs_GetDFSReferral_in req, */
1200 /* IDL: [out] [ref] dfs_referral_resp *resp */
1201 /* IDL: ); */
1202
1203 static int
1204 dfsblobs_dissect_dfs_GetDFSReferral_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
1205 {
1206         pinfo->dcerpc_procedure_name="dfs_GetDFSReferral";
1207         offset = dfsblobs_dissect_element_dfs_GetDFSReferral_resp(tvb, offset, pinfo, tree, drep);
1208         offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
1209
1210         return offset;
1211 }
1212
1213 static int
1214 dfsblobs_dissect_dfs_GetDFSReferral_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
1215 {
1216         pinfo->dcerpc_procedure_name="dfs_GetDFSReferral";
1217         offset = dfsblobs_dissect_element_dfs_GetDFSReferral_req(tvb, offset, pinfo, tree, drep);
1218         offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
1219         return offset;
1220 }
1221
1222
1223 static dcerpc_sub_dissector dfsblobs_dissectors[] = {
1224         { 0, "dfs_GetDFSReferral",
1225            dfsblobs_dissect_dfs_GetDFSReferral_request, dfsblobs_dissect_dfs_GetDFSReferral_response},
1226         { 0, NULL, NULL, NULL }
1227 };
1228
1229 void proto_register_dcerpc_dfsblobs(void)
1230 {
1231         static hf_register_info hf[] = {
1232         { &hf_dfsblobs_dfs_referral_version_v4,
1233           { "V4", "dfsblobs.dfs_referral_version.v4", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
1234         { &hf_dfsblobs_dfs_domain_referral_special_name,
1235           { "Special Name", "dfsblobs.dfs_domain_referral.special_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
1236         { &hf_dfsblobs_dfs_referral_v3_ttl,
1237           { "Ttl", "dfsblobs.dfs_referral_v3.ttl", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
1238         { &hf_dfsblobs_dfs_referral_v2_server_type,
1239           { "Server Type", "dfsblobs.dfs_referral_v2.server_type", FT_UINT16, BASE_DEC, VALS(dfsblobs_DFS_SERVER_TYPE_vals), 0, NULL, HFILL }},
1240         { &hf_dfsblobs_dfs_referral_v1_server_type,
1241           { "Server Type", "dfsblobs.dfs_referral_v1.server_type", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
1242         { &hf_dfsblobs_dfs_normal_referral_netw_address,
1243           { "Netw Address", "dfsblobs.dfs_normal_referral.netw_address", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
1244         { &hf_dfsblobs_dfs_referral_v2_proximity,
1245           { "Proximity", "dfsblobs.dfs_referral_v2.proximity", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
1246         { &hf_dfsblobs_dfs_referral_v2_size,
1247           { "Size", "dfsblobs.dfs_referral_v2.size", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
1248         { &hf_dfsblobs_dfs_referral_v3_server_type,
1249           { "Server Type", "dfsblobs.dfs_referral_v3.server_type", FT_UINT16, BASE_DEC, VALS(dfsblobs_DFS_SERVER_TYPE_vals), 0, NULL, HFILL }},
1250         { &hf_dfsblobs_DFS_HEADER_FLAG_DFS_HEADER_FLAG_REFERAL_SVR,
1251           { "Dfs Header Flag Referal Svr", "dfsblobs.DFS_HEADER_FLAG.DFS_HEADER_FLAG_REFERAL_SVR", FT_BOOLEAN, 32, TFS(&DFS_HEADER_FLAG_DFS_HEADER_FLAG_REFERAL_SVR_tfs), ( 0x00000001 ), NULL, HFILL }},
1252         { &hf_dfsblobs_dfs_referral_resp_path_consumed,
1253           { "Path Consumed", "dfsblobs.dfs_referral_resp.path_consumed", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
1254         { &hf_dfsblobs_dfs_referral_version_v3,
1255           { "V3", "dfsblobs.dfs_referral_version.v3", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
1256         { &hf_dfsblobs_dfs_referral_v3_referrals,
1257           { "Referrals", "dfsblobs.dfs_referral_v3.referrals", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
1258         { &hf_dfsblobs_dfs_referral_v1_entry_flags,
1259           { "Entry Flags", "dfsblobs.dfs_referral_v1.entry_flags", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
1260         { &hf_dfsblobs_dfs_referral_resp_referral_entries,
1261           { "Referral Entries", "dfsblobs.dfs_referral_resp.referral_entries", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
1262         { &hf_dfsblobs_dfs_referral_type_referral,
1263           { "Referral", "dfsblobs.dfs_referral_type.referral", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
1264         { &hf_dfsblobs_dfs_referral_r1,
1265           { "R1", "dfsblobs.dfs_referral.r1", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
1266         { &hf_dfsblobs_dfs_referral_version_v1,
1267           { "V1", "dfsblobs.dfs_referral_version.v1", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
1268         { &hf_dfsblobs_dfs_GetDFSReferral_req,
1269           { "Req", "dfsblobs.dfs_GetDFSReferral.req", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
1270         { &hf_dfsblobs_dfs_referral_v1_share_name,
1271           { "Share Name", "dfsblobs.dfs_referral_v1.share_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
1272         { &hf_dfsblobs_dfs_referral_v2_netw_address,
1273           { "Netw Address", "dfsblobs.dfs_referral_v2.netw_address", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
1274         { &hf_dfsblobs_dfs_domain_referral_expanded_names_,
1275           { "Subcontext length", "dfsblobs.dfs_domain_referral.subcontext", FT_UINT0, BASE_HEX, NULL, 0, NULL, HFILL }},
1276         { &hf_dfsblobs_dfs_referral_type_version,
1277           { "Version", "dfsblobs.dfs_referral_type.version", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
1278         { &hf_dfsblobs_dfs_domain_referral_nb_expanded_names,
1279           { "Nb Expanded Names", "dfsblobs.dfs_domain_referral.nb_expanded_names", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
1280         { &hf_dfsblobs_opnum,
1281           { "Operation", "dfsblobs.opnum", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
1282         { &hf_dfsblobs_dfs_GetDFSReferral_in_max_referral_level,
1283           { "Max Referral Level", "dfsblobs.dfs_GetDFSReferral_in.max_referral_level", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
1284         { &hf_dfsblobs_dfs_referral_v2_DFS_alt_path,
1285           { "Dfs Alt Path", "dfsblobs.dfs_referral_v2.DFS_alt_path", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
1286         { &hf_dfsblobs_dfs_domain_referral_expanded_names,
1287           { "Expanded Names", "dfsblobs.dfs_domain_referral.expanded_names", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
1288         { &hf_dfsblobs_dfs_referral_r2,
1289           { "R2", "dfsblobs.dfs_referral.r2", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
1290         { &hf_dfsblobs_dfs_referral_v3_service_site_guid,
1291           { "Service Site Guid", "dfsblobs.dfs_referral_v3.service_site_guid", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
1292         { &hf_dfsblobs_dfs_GetDFSReferral_in_servername,
1293           { "Servername", "dfsblobs.dfs_GetDFSReferral_in.servername", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
1294         { &hf_dfsblobs_dfs_referral_resp_nb_referrals,
1295           { "Nb Referrals", "dfsblobs.dfs_referral_resp.nb_referrals", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
1296         { &hf_dfsblobs_dfs_normal_referral_DFS_alt_path,
1297           { "Dfs Alt Path", "dfsblobs.dfs_normal_referral.DFS_alt_path", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
1298         { &hf_dfsblobs_DFS_HEADER_FLAG_DFS_HEADER_FLAG_STORAGE_SVR,
1299           { "Dfs Header Flag Storage Svr", "dfsblobs.DFS_HEADER_FLAG.DFS_HEADER_FLAG_STORAGE_SVR", FT_BOOLEAN, 32, TFS(&DFS_HEADER_FLAG_DFS_HEADER_FLAG_STORAGE_SVR_tfs), ( 0x00000002 ), NULL, HFILL }},
1300         { &hf_dfsblobs_dfs_referral_v1_size,
1301           { "Size", "dfsblobs.dfs_referral_v1.size", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
1302         { &hf_dfsblobs_dfs_padding_value,
1303           { "Value", "dfsblobs.dfs_padding.value", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
1304         { &hf_dfsblobs_dfs_referral_resp_header_flags,
1305           { "Header Flags", "dfsblobs.dfs_referral_resp.header_flags", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
1306         { &hf_dfsblobs_dfs_normal_referral_DFS_path,
1307           { "Dfs Path", "dfsblobs.dfs_normal_referral.DFS_path", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
1308         { &hf_dfsblobs_dfs_referral_v3_entry_flags,
1309           { "Entry Flags", "dfsblobs.dfs_referral_v3.entry_flags", FT_UINT16, BASE_DEC, VALS(dfsblobs_DFS_FLAGS_REFERRAL_vals), 0, NULL, HFILL }},
1310         { &hf_dfsblobs_dfs_referral_v3_size,
1311           { "Size", "dfsblobs.dfs_referral_v3.size", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
1312         { &hf_dfsblobs_dfs_GetDFSReferral_resp,
1313           { "Resp", "dfsblobs.dfs_GetDFSReferral.resp", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
1314         { &hf_dfsblobs_dfs_referral_v2_entry_flags,
1315           { "Entry Flags", "dfsblobs.dfs_referral_v2.entry_flags", FT_UINT16, BASE_DEC, VALS(dfsblobs_DFS_FLAGS_REFERRAL_vals), 0, NULL, HFILL }},
1316         { &hf_dfsblobs_dfs_referral_version_v2,
1317           { "V2", "dfsblobs.dfs_referral_version.v2", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
1318         { &hf_dfsblobs_dfs_referral_v2_ttl,
1319           { "Ttl", "dfsblobs.dfs_referral_v2.ttl", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
1320         { &hf_dfsblobs_dfs_referral_v2_DFS_path,
1321           { "Dfs Path", "dfsblobs.dfs_referral_v2.DFS_path", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
1322         { &hf_dfsblobs_DFS_HEADER_FLAG_DFS_HEADER_FLAG_TARGET_BCK,
1323           { "Dfs Header Flag Target Bck", "dfsblobs.DFS_HEADER_FLAG.DFS_HEADER_FLAG_TARGET_BCK", FT_BOOLEAN, 32, TFS(&DFS_HEADER_FLAG_DFS_HEADER_FLAG_TARGET_BCK_tfs), ( 0x00000004 ), NULL, HFILL }},
1324         };
1325
1326
1327         static gint *ett[] = {
1328                 &ett_dcerpc_dfsblobs,
1329                 &ett_dfsblobs_DFS_HEADER_FLAG,
1330                 &ett_dfsblobs_dfs_referral_v1,
1331                 &ett_dfsblobs_dfs_referral_v2,
1332                 &ett_dfsblobs_dfs_normal_referral,
1333                 &ett_dfsblobs_dfs_domain_referral,
1334                 &ett_dfsblobs_dfs_referral,
1335                 &ett_dfsblobs_dfs_padding,
1336                 &ett_dfsblobs_dfs_referral_v3,
1337                 &ett_dfsblobs_dfs_referral_version,
1338                 &ett_dfsblobs_dfs_referral_type,
1339                 &ett_dfsblobs_dfs_referral_resp,
1340                 &ett_dfsblobs_dfs_GetDFSReferral_in,
1341         };
1342
1343         proto_dcerpc_dfsblobs = proto_register_protocol("dfs referral blobs", "DFSBLOBS", "dfsblobs");
1344         proto_register_field_array(proto_dcerpc_dfsblobs, hf, array_length (hf));
1345         proto_register_subtree_array(ett, array_length(ett));
1346 }
1347
1348 void proto_reg_handoff_dcerpc_dfsblobs(void)
1349 {
1350         dcerpc_init_uuid(proto_dcerpc_dfsblobs, ett_dcerpc_dfsblobs,
1351                 &uuid_dcerpc_dfsblobs, ver_dcerpc_dfsblobs,
1352                 dfsblobs_dissectors, hf_dfsblobs_opnum);
1353 }