From LEGO via bug 4405:
[obnox/wireshark/wip.git] / epan / dissectors / packet-dsp.c
1 /* Do not modify this file.                                                   */
2 /* It is created automatically by the ASN.1 to Wireshark dissector compiler   */
3 /* packet-dsp.c                                                               */
4 /* ../../tools/asn2wrs.py -b -e -p dsp -c ./dsp.cnf -s ./packet-dsp-template -D . dsp.asn */
5
6 /* Input file: packet-dsp-template.c */
7
8 #line 1 "packet-dsp-template.c"
9 /* packet-dsp.c
10  * Routines for X.518 (X.500 Distributed Operations)  packet dissection
11  * Graeme Lunt 2005
12  *
13  * $Id$
14  *
15  * Wireshark - Network traffic analyzer
16  * By Gerald Combs <gerald@wireshark.org>
17  * Copyright 1998 Gerald Combs
18  *
19  * This program is free software; you can redistribute it and/or
20  * modify it under the terms of the GNU General Public License
21  * as published by the Free Software Foundation; either version 2
22  * of the License, or (at your option) any later version.
23  *
24  * This program is distributed in the hope that it will be useful,
25  * but WITHOUT ANY WARRANTY; without even the implied warranty of
26  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27  * GNU General Public License for more details.
28  *
29  * You should have received a copy of the GNU General Public License
30  * along with this program; if not, write to the Free Software
31  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
32  */
33
34 #ifdef HAVE_CONFIG_H
35 # include "config.h"
36 #endif
37
38 #include <glib.h>
39 #include <epan/packet.h>
40 #include <epan/prefs.h>
41 #include <epan/oids.h>
42 #include <epan/asn1.h>
43
44 #include <stdio.h>
45 #include <string.h>
46
47 #include "packet-ber.h"
48 #include "packet-acse.h"
49 #include "packet-ros.h"
50
51 #include "packet-x509if.h"
52 #include "packet-x509af.h"
53 #include "packet-x509sat.h"
54
55 #include "packet-dap.h"
56 #include "packet-dsp.h"
57
58
59 #define PNAME  "X.519 Directory System Protocol"
60 #define PSNAME "DSP"
61 #define PFNAME "dsp"
62
63 static guint global_dsp_tcp_port = 102;
64 static dissector_handle_t tpkt_handle;
65 void prefs_register_dsp(void); /* forward declaration for use in preferences registration */
66
67
68 /* Initialize the protocol and registered fields */
69 static int proto_dsp = -1;
70
71 static struct SESSION_DATA_STRUCTURE* session = NULL;
72
73
74 /*--- Included file: packet-dsp-hf.c ---*/
75 #line 1 "packet-dsp-hf.c"
76 static int hf_dsp_AccessPoint_PDU = -1;           /* AccessPoint */
77 static int hf_dsp_MasterAndShadowAccessPoints_PDU = -1;  /* MasterAndShadowAccessPoints */
78 static int hf_dsp_DitBridgeKnowledge_PDU = -1;    /* DitBridgeKnowledge */
79 static int hf_dsp_chainedArgument = -1;           /* ChainingArguments */
80 static int hf_dsp_readArgument = -1;              /* ReadArgument */
81 static int hf_dsp_unsignedChainedReadArgument = -1;  /* ChainedReadArgumentData */
82 static int hf_dsp_signedChainedReadArgument = -1;  /* T_signedChainedReadArgument */
83 static int hf_dsp_chainedReadArgument = -1;       /* ChainedReadArgumentData */
84 static int hf_dsp_algorithmIdentifier = -1;       /* AlgorithmIdentifier */
85 static int hf_dsp_encrypted = -1;                 /* BIT_STRING */
86 static int hf_dsp_chainedResults = -1;            /* ChainingResults */
87 static int hf_dsp_readResult = -1;                /* ReadResult */
88 static int hf_dsp_unsignedChainedReadResult = -1;  /* ChainedReadResultData */
89 static int hf_dsp_signedChainedReadResult = -1;   /* T_signedChainedReadResult */
90 static int hf_dsp_chainedReadResult = -1;         /* ChainedReadResultData */
91 static int hf_dsp_compareArgument = -1;           /* CompareArgument */
92 static int hf_dsp_unsignedChainedCompareArgument = -1;  /* ChainedCompareArgumentData */
93 static int hf_dsp_signedChainedCompareArgument = -1;  /* T_signedChainedCompareArgument */
94 static int hf_dsp_chainedCompareArgument = -1;    /* ChainedCompareArgumentData */
95 static int hf_dsp_compareResult = -1;             /* CompareResult */
96 static int hf_dsp_unsignedChainedCompareResult = -1;  /* ChainedCompareResultData */
97 static int hf_dsp_signedChainedCompareResult = -1;  /* T_signedChainedCompareResult */
98 static int hf_dsp_chainedCompareResult = -1;      /* ChainedCompareResultData */
99 static int hf_dsp_listArgument = -1;              /* ListArgument */
100 static int hf_dsp_unsignedChainedListArgument = -1;  /* ChainedListArgumentData */
101 static int hf_dsp_signedChainedListArgument = -1;  /* T_signedChainedListArgument */
102 static int hf_dsp_chainedListArgument = -1;       /* ChainedListArgumentData */
103 static int hf_dsp_listResult = -1;                /* ListResult */
104 static int hf_dsp_unsignedChainedListResult = -1;  /* ChainedListResultData */
105 static int hf_dsp_signedChainedListResult = -1;   /* T_signedChainedListResult */
106 static int hf_dsp_chainedListResult = -1;         /* ChainedListResultData */
107 static int hf_dsp_searchArgument = -1;            /* SearchArgument */
108 static int hf_dsp_unsignedChainedSearchArgument = -1;  /* ChainedSearchArgumentData */
109 static int hf_dsp_signedChainedSearchArgument = -1;  /* T_signedChainedSearchArgument */
110 static int hf_dsp_chainedSearchArgument = -1;     /* ChainedSearchArgumentData */
111 static int hf_dsp_searchResult = -1;              /* SearchResult */
112 static int hf_dsp_unsignedChainedSearchResult = -1;  /* ChainedSearchResultData */
113 static int hf_dsp_signedChainedSearchResult = -1;  /* T_signedChainedSearchResult */
114 static int hf_dsp_chainedSearchResult = -1;       /* ChainedSearchResultData */
115 static int hf_dsp_addEntryArgument = -1;          /* AddEntryArgument */
116 static int hf_dsp_unsignedChainedAddEntryArgument = -1;  /* ChainedAddEntryArgumentData */
117 static int hf_dsp_signedChainedAddEntryArgument = -1;  /* T_signedChainedAddEntryArgument */
118 static int hf_dsp_chainedAddEntryArgument = -1;   /* ChainedAddEntryArgumentData */
119 static int hf_dsp_addEntryResult = -1;            /* AddEntryResult */
120 static int hf_dsp_unsignedChainedAddEntryResult = -1;  /* ChainedAddEntryResultData */
121 static int hf_dsp_signedChainedAddEntryResult = -1;  /* T_signedChainedAddEntryResult */
122 static int hf_dsp_chainedAddEntryResult = -1;     /* ChainedAddEntryResultData */
123 static int hf_dsp_removeEntryArgument = -1;       /* RemoveEntryArgument */
124 static int hf_dsp_unsignedChainedRemoveEntryArgument = -1;  /* ChainedRemoveEntryArgumentData */
125 static int hf_dsp_signedChainedRemoveEntryArgument = -1;  /* T_signedChainedRemoveEntryArgument */
126 static int hf_dsp_chainedRemoveEntryArgument = -1;  /* ChainedRemoveEntryArgumentData */
127 static int hf_dsp_removeEntryResult = -1;         /* RemoveEntryResult */
128 static int hf_dsp_unsignedChainedRemoveEntryResult = -1;  /* ChainedRemoveEntryResultData */
129 static int hf_dsp_signedChainedRemoveEntryResult = -1;  /* T_signedChainedRemoveEntryResult */
130 static int hf_dsp_chainedRemoveEntryResult = -1;  /* ChainedRemoveEntryResultData */
131 static int hf_dsp_modifyEntryArgument = -1;       /* ModifyEntryArgument */
132 static int hf_dsp_unsignedChainedModifyEntryArgument = -1;  /* ChainedModifyEntryArgumentData */
133 static int hf_dsp_signedChainedModifyEntryArgument = -1;  /* T_signedChainedModifyEntryArgument */
134 static int hf_dsp_chainedModifyEntryArgument = -1;  /* ChainedModifyEntryArgumentData */
135 static int hf_dsp_modifyEntryResult = -1;         /* ModifyEntryResult */
136 static int hf_dsp_unsignedChainedModifyEntryResult = -1;  /* ChainedModifyEntryResultData */
137 static int hf_dsp_signedChainedModifyEntryResult = -1;  /* T_signedChainedModifyEntryResult */
138 static int hf_dsp_chainedModifyEntryResult = -1;  /* ChainedModifyEntryResultData */
139 static int hf_dsp_modifyDNArgument = -1;          /* ModifyDNArgument */
140 static int hf_dsp_unsignedChainedModifyDNArgument = -1;  /* ChainedModifyDNArgumentData */
141 static int hf_dsp_signedChainedModifyDNArgument = -1;  /* T_signedChainedModifyDNArgument */
142 static int hf_dsp_chainedModifyDNArgument = -1;   /* ChainedModifyDNArgumentData */
143 static int hf_dsp_modifyDNResult = -1;            /* ModifyDNResult */
144 static int hf_dsp_unsignedChainedModifyDNResult = -1;  /* ChainedModifyDNResultData */
145 static int hf_dsp_signedChainedModifyDNResult = -1;  /* T_signedChainedModifyDNResult */
146 static int hf_dsp_chainedModifyDNResult = -1;     /* ChainedModifyDNResultData */
147 static int hf_dsp_reference = -1;                 /* ContinuationReference */
148 static int hf_dsp_contextPrefix = -1;             /* DistinguishedName */
149 static int hf_dsp_securityParameters = -1;        /* SecurityParameters */
150 static int hf_dsp_performer = -1;                 /* DistinguishedName */
151 static int hf_dsp_aliasDereferenced = -1;         /* BOOLEAN */
152 static int hf_dsp_notification = -1;              /* SEQUENCE_OF_Attribute */
153 static int hf_dsp_notification_item = -1;         /* Attribute */
154 static int hf_dsp_unsignedDSAReferral = -1;       /* DSAReferralData */
155 static int hf_dsp_signedDSAReferral = -1;         /* T_signedDSAReferral */
156 static int hf_dsp_dsaReferral = -1;               /* DSAReferralData */
157 static int hf_dsp_originator = -1;                /* DistinguishedName */
158 static int hf_dsp_targetObjectDN = -1;            /* DistinguishedName */
159 static int hf_dsp_operationProgress = -1;         /* OperationProgress */
160 static int hf_dsp_traceInformation = -1;          /* TraceInformation */
161 static int hf_dsp_aliasedRDNs = -1;               /* INTEGER */
162 static int hf_dsp_returnCrossRefs = -1;           /* BOOLEAN */
163 static int hf_dsp_referenceType = -1;             /* ReferenceType */
164 static int hf_dsp_info = -1;                      /* DomainInfo */
165 static int hf_dsp_timeLimit = -1;                 /* Time */
166 static int hf_dsp_entryOnly = -1;                 /* BOOLEAN */
167 static int hf_dsp_uniqueIdentifier = -1;          /* UniqueIdentifier */
168 static int hf_dsp_authenticationLevel = -1;       /* AuthenticationLevel */
169 static int hf_dsp_exclusions = -1;                /* Exclusions */
170 static int hf_dsp_excludeShadows = -1;            /* BOOLEAN */
171 static int hf_dsp_nameResolveOnMaster = -1;       /* BOOLEAN */
172 static int hf_dsp_operationIdentifier = -1;       /* INTEGER */
173 static int hf_dsp_searchRuleId = -1;              /* SearchRuleId */
174 static int hf_dsp_chainedRelaxation = -1;         /* MRMapping */
175 static int hf_dsp_relatedEntry = -1;              /* INTEGER */
176 static int hf_dsp_dspPaging = -1;                 /* BOOLEAN */
177 static int hf_dsp_nonDapPdu = -1;                 /* T_nonDapPdu */
178 static int hf_dsp_streamedResults = -1;           /* INTEGER */
179 static int hf_dsp_excludeWriteableCopies = -1;    /* BOOLEAN */
180 static int hf_dsp_utcTime = -1;                   /* UTCTime */
181 static int hf_dsp_generalizedTime = -1;           /* GeneralizedTime */
182 static int hf_dsp_crossReferences = -1;           /* SEQUENCE_OF_CrossReference */
183 static int hf_dsp_crossReferences_item = -1;      /* CrossReference */
184 static int hf_dsp_alreadySearched = -1;           /* Exclusions */
185 static int hf_dsp_accessPoint = -1;               /* AccessPointInformation */
186 static int hf_dsp_nameResolutionPhase = -1;       /* T_nameResolutionPhase */
187 static int hf_dsp_nextRDNToBeResolved = -1;       /* INTEGER */
188 static int hf_dsp_TraceInformation_item = -1;     /* TraceItem */
189 static int hf_dsp_dsa = -1;                       /* Name */
190 static int hf_dsp_targetObject = -1;              /* Name */
191 static int hf_dsp_ae_title = -1;                  /* Name */
192 static int hf_dsp_address = -1;                   /* PresentationAddress */
193 static int hf_dsp_protocolInformation = -1;       /* SET_OF_ProtocolInformation */
194 static int hf_dsp_protocolInformation_item = -1;  /* ProtocolInformation */
195 static int hf_dsp_labeledURI = -1;                /* LabeledURI */
196 static int hf_dsp_access_point_category = -1;     /* APCategory */
197 static int hf_dsp_chainingRequired = -1;          /* BOOLEAN */
198 static int hf_dsp_MasterAndShadowAccessPoints_item = -1;  /* MasterOrShadowAccessPoint */
199 static int hf_dsp_category = -1;                  /* T_category */
200 static int hf_dsp_additionalPoints = -1;          /* MasterAndShadowAccessPoints */
201 static int hf_dsp_domainLocalID = -1;             /* DirectoryString */
202 static int hf_dsp_accessPoints = -1;              /* MasterAndShadowAccessPoints */
203 static int hf_dsp_Exclusions_item = -1;           /* RDNSequence */
204 static int hf_dsp_rdnsResolved = -1;              /* INTEGER */
205 static int hf_dsp_accessPoints_01 = -1;           /* SET_OF_AccessPointInformation */
206 static int hf_dsp_accessPoints_item = -1;         /* AccessPointInformation */
207 static int hf_dsp_returnToDUA = -1;               /* BOOLEAN */
208 static int hf_dsp_basicLevels = -1;               /* T_basicLevels */
209 static int hf_dsp_level = -1;                     /* T_level */
210 static int hf_dsp_localQualifier = -1;            /* INTEGER */
211 static int hf_dsp_signed = -1;                    /* BOOLEAN */
212 static int hf_dsp_other = -1;                     /* EXTERNAL */
213
214 /*--- End of included file: packet-dsp-hf.c ---*/
215 #line 66 "packet-dsp-template.c"
216
217 /* Initialize the subtree pointers */
218 static gint ett_dsp = -1;
219
220 /*--- Included file: packet-dsp-ett.c ---*/
221 #line 1 "packet-dsp-ett.c"
222 static gint ett_dsp_ChainedReadArgumentData = -1;
223 static gint ett_dsp_ChainedReadArgument = -1;
224 static gint ett_dsp_T_signedChainedReadArgument = -1;
225 static gint ett_dsp_ChainedReadResultData = -1;
226 static gint ett_dsp_ChainedReadResult = -1;
227 static gint ett_dsp_T_signedChainedReadResult = -1;
228 static gint ett_dsp_ChainedCompareArgumentData = -1;
229 static gint ett_dsp_ChainedCompareArgument = -1;
230 static gint ett_dsp_T_signedChainedCompareArgument = -1;
231 static gint ett_dsp_ChainedCompareResultData = -1;
232 static gint ett_dsp_ChainedCompareResult = -1;
233 static gint ett_dsp_T_signedChainedCompareResult = -1;
234 static gint ett_dsp_ChainedListArgumentData = -1;
235 static gint ett_dsp_ChainedListArgument = -1;
236 static gint ett_dsp_T_signedChainedListArgument = -1;
237 static gint ett_dsp_ChainedListResultData = -1;
238 static gint ett_dsp_ChainedListResult = -1;
239 static gint ett_dsp_T_signedChainedListResult = -1;
240 static gint ett_dsp_ChainedSearchArgumentData = -1;
241 static gint ett_dsp_ChainedSearchArgument = -1;
242 static gint ett_dsp_T_signedChainedSearchArgument = -1;
243 static gint ett_dsp_ChainedSearchResultData = -1;
244 static gint ett_dsp_ChainedSearchResult = -1;
245 static gint ett_dsp_T_signedChainedSearchResult = -1;
246 static gint ett_dsp_ChainedAddEntryArgumentData = -1;
247 static gint ett_dsp_ChainedAddEntryArgument = -1;
248 static gint ett_dsp_T_signedChainedAddEntryArgument = -1;
249 static gint ett_dsp_ChainedAddEntryResultData = -1;
250 static gint ett_dsp_ChainedAddEntryResult = -1;
251 static gint ett_dsp_T_signedChainedAddEntryResult = -1;
252 static gint ett_dsp_ChainedRemoveEntryArgumentData = -1;
253 static gint ett_dsp_ChainedRemoveEntryArgument = -1;
254 static gint ett_dsp_T_signedChainedRemoveEntryArgument = -1;
255 static gint ett_dsp_ChainedRemoveEntryResultData = -1;
256 static gint ett_dsp_ChainedRemoveEntryResult = -1;
257 static gint ett_dsp_T_signedChainedRemoveEntryResult = -1;
258 static gint ett_dsp_ChainedModifyEntryArgumentData = -1;
259 static gint ett_dsp_ChainedModifyEntryArgument = -1;
260 static gint ett_dsp_T_signedChainedModifyEntryArgument = -1;
261 static gint ett_dsp_ChainedModifyEntryResultData = -1;
262 static gint ett_dsp_ChainedModifyEntryResult = -1;
263 static gint ett_dsp_T_signedChainedModifyEntryResult = -1;
264 static gint ett_dsp_ChainedModifyDNArgumentData = -1;
265 static gint ett_dsp_ChainedModifyDNArgument = -1;
266 static gint ett_dsp_T_signedChainedModifyDNArgument = -1;
267 static gint ett_dsp_ChainedModifyDNResultData = -1;
268 static gint ett_dsp_ChainedModifyDNResult = -1;
269 static gint ett_dsp_T_signedChainedModifyDNResult = -1;
270 static gint ett_dsp_DSAReferralData = -1;
271 static gint ett_dsp_SEQUENCE_OF_Attribute = -1;
272 static gint ett_dsp_DSAReferral = -1;
273 static gint ett_dsp_T_signedDSAReferral = -1;
274 static gint ett_dsp_ChainingArguments = -1;
275 static gint ett_dsp_Time = -1;
276 static gint ett_dsp_ChainingResults = -1;
277 static gint ett_dsp_SEQUENCE_OF_CrossReference = -1;
278 static gint ett_dsp_CrossReference = -1;
279 static gint ett_dsp_OperationProgress = -1;
280 static gint ett_dsp_TraceInformation = -1;
281 static gint ett_dsp_TraceItem = -1;
282 static gint ett_dsp_AccessPoint = -1;
283 static gint ett_dsp_SET_OF_ProtocolInformation = -1;
284 static gint ett_dsp_MasterOrShadowAccessPoint = -1;
285 static gint ett_dsp_MasterAndShadowAccessPoints = -1;
286 static gint ett_dsp_AccessPointInformation = -1;
287 static gint ett_dsp_DitBridgeKnowledge = -1;
288 static gint ett_dsp_Exclusions = -1;
289 static gint ett_dsp_ContinuationReference = -1;
290 static gint ett_dsp_SET_OF_AccessPointInformation = -1;
291 static gint ett_dsp_AuthenticationLevel = -1;
292 static gint ett_dsp_T_basicLevels = -1;
293
294 /*--- End of included file: packet-dsp-ett.c ---*/
295 #line 70 "packet-dsp-template.c"
296
297
298 /*--- Included file: packet-dsp-fn.c ---*/
299 #line 1 "packet-dsp-fn.c"
300
301
302 static int
303 dissect_dsp_DSASystemBindArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
304   offset = dissect_dap_DirectoryBindArgument(implicit_tag, tvb, offset, actx, tree, hf_index);
305
306   return offset;
307 }
308
309
310
311 static int
312 dissect_dsp_DSASystemBindResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
313   offset = dissect_dap_DirectoryBindArgument(implicit_tag, tvb, offset, actx, tree, hf_index);
314
315   return offset;
316 }
317
318
319
320 static int
321 dissect_dsp_DSASystemBindError(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
322   offset = dissect_dap_DirectoryBindError(implicit_tag, tvb, offset, actx, tree, hf_index);
323
324   return offset;
325 }
326
327
328 static const value_string dsp_T_nameResolutionPhase_vals[] = {
329   {   1, "notStarted" },
330   {   2, "proceeding" },
331   {   3, "completed" },
332   { 0, NULL }
333 };
334
335
336 static int
337 dissect_dsp_T_nameResolutionPhase(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
338   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
339                                   NULL);
340
341   return offset;
342 }
343
344
345
346 static int
347 dissect_dsp_INTEGER(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
348   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
349                                                 NULL);
350
351   return offset;
352 }
353
354
355 static const ber_sequence_t OperationProgress_set[] = {
356   { &hf_dsp_nameResolutionPhase, BER_CLASS_CON, 0, 0, dissect_dsp_T_nameResolutionPhase },
357   { &hf_dsp_nextRDNToBeResolved, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_dsp_INTEGER },
358   { NULL, 0, 0, 0, NULL }
359 };
360
361 int
362 dissect_dsp_OperationProgress(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
363   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
364                               OperationProgress_set, hf_index, ett_dsp_OperationProgress);
365
366   return offset;
367 }
368
369
370 static const ber_sequence_t TraceItem_set[] = {
371   { &hf_dsp_dsa             , BER_CLASS_CON, 0, 0, dissect_x509if_Name },
372   { &hf_dsp_targetObject    , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_x509if_Name },
373   { &hf_dsp_operationProgress, BER_CLASS_CON, 2, 0, dissect_dsp_OperationProgress },
374   { NULL, 0, 0, 0, NULL }
375 };
376
377 static int
378 dissect_dsp_TraceItem(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
379   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
380                               TraceItem_set, hf_index, ett_dsp_TraceItem);
381
382   return offset;
383 }
384
385
386 static const ber_sequence_t TraceInformation_sequence_of[1] = {
387   { &hf_dsp_TraceInformation_item, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_TraceItem },
388 };
389
390 static int
391 dissect_dsp_TraceInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
392   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
393                                       TraceInformation_sequence_of, hf_index, ett_dsp_TraceInformation);
394
395   return offset;
396 }
397
398
399
400 static int
401 dissect_dsp_BOOLEAN(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
402   offset = dissect_ber_boolean(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
403
404   return offset;
405 }
406
407
408 const value_string dsp_ReferenceType_vals[] = {
409   {   1, "superior" },
410   {   2, "subordinate" },
411   {   3, "cross" },
412   {   4, "nonSpecificSubordinate" },
413   {   5, "supplier" },
414   {   6, "master" },
415   {   7, "immediateSuperior" },
416   {   8, "self" },
417   {   9, "ditBridge" },
418   { 0, NULL }
419 };
420
421
422 int
423 dissect_dsp_ReferenceType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
424   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
425                                   NULL);
426
427   return offset;
428 }
429
430
431
432 static int
433 dissect_dsp_DomainInfo(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
434   offset = dissect_ber_object_identifier(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
435
436   return offset;
437 }
438
439
440
441 static int
442 dissect_dsp_UTCTime(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
443   offset = dissect_ber_UTCTime(implicit_tag, actx, tree, tvb, offset, hf_index);
444
445   return offset;
446 }
447
448
449
450 static int
451 dissect_dsp_GeneralizedTime(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
452   offset = dissect_ber_GeneralizedTime(implicit_tag, actx, tree, tvb, offset, hf_index);
453
454   return offset;
455 }
456
457
458 static const value_string dsp_Time_vals[] = {
459   {   0, "utcTime" },
460   {   1, "generalizedTime" },
461   { 0, NULL }
462 };
463
464 static const ber_choice_t Time_choice[] = {
465   {   0, &hf_dsp_utcTime         , BER_CLASS_UNI, BER_UNI_TAG_UTCTime, BER_FLAGS_NOOWNTAG, dissect_dsp_UTCTime },
466   {   1, &hf_dsp_generalizedTime , BER_CLASS_UNI, BER_UNI_TAG_GeneralizedTime, BER_FLAGS_NOOWNTAG, dissect_dsp_GeneralizedTime },
467   { 0, NULL, 0, 0, 0, NULL }
468 };
469
470 static int
471 dissect_dsp_Time(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
472   offset = dissect_ber_choice(actx, tree, tvb, offset,
473                                  Time_choice, hf_index, ett_dsp_Time,
474                                  NULL);
475
476   return offset;
477 }
478
479
480 static const value_string dsp_T_level_vals[] = {
481   {   0, "none" },
482   {   1, "simple" },
483   {   2, "strong" },
484   { 0, NULL }
485 };
486
487
488 static int
489 dissect_dsp_T_level(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
490   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
491                                   NULL);
492
493   return offset;
494 }
495
496
497 static const ber_sequence_t T_basicLevels_sequence[] = {
498   { &hf_dsp_level           , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_dsp_T_level },
499   { &hf_dsp_localQualifier  , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_dsp_INTEGER },
500   { &hf_dsp_signed          , BER_CLASS_UNI, BER_UNI_TAG_BOOLEAN, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_dsp_BOOLEAN },
501   { NULL, 0, 0, 0, NULL }
502 };
503
504 static int
505 dissect_dsp_T_basicLevels(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
506   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
507                                    T_basicLevels_sequence, hf_index, ett_dsp_T_basicLevels);
508
509   return offset;
510 }
511
512
513
514 static int
515 dissect_dsp_EXTERNAL(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
516   offset = dissect_ber_external_type(implicit_tag, tree, tvb, offset, actx, hf_index, NULL);
517
518   return offset;
519 }
520
521
522 static const value_string dsp_AuthenticationLevel_vals[] = {
523   {   0, "basicLevels" },
524   {   1, "other" },
525   { 0, NULL }
526 };
527
528 static const ber_choice_t AuthenticationLevel_choice[] = {
529   {   0, &hf_dsp_basicLevels     , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dsp_T_basicLevels },
530   {   1, &hf_dsp_other           , BER_CLASS_UNI, BER_UNI_TAG_EXTERNAL, BER_FLAGS_NOOWNTAG, dissect_dsp_EXTERNAL },
531   { 0, NULL, 0, 0, 0, NULL }
532 };
533
534 static int
535 dissect_dsp_AuthenticationLevel(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
536   offset = dissect_ber_choice(actx, tree, tvb, offset,
537                                  AuthenticationLevel_choice, hf_index, ett_dsp_AuthenticationLevel,
538                                  NULL);
539
540   return offset;
541 }
542
543
544 static const ber_sequence_t Exclusions_set_of[1] = {
545   { &hf_dsp_Exclusions_item , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_RDNSequence },
546 };
547
548 int
549 dissect_dsp_Exclusions(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
550   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
551                                  Exclusions_set_of, hf_index, ett_dsp_Exclusions);
552
553   return offset;
554 }
555
556
557 static const value_string dsp_T_nonDapPdu_vals[] = {
558   {   0, "ldap" },
559   { 0, NULL }
560 };
561
562
563 static int
564 dissect_dsp_T_nonDapPdu(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
565   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
566                                   NULL);
567
568   return offset;
569 }
570
571
572 static const ber_sequence_t ChainingArguments_set[] = {
573   { &hf_dsp_originator      , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_x509if_DistinguishedName },
574   { &hf_dsp_targetObjectDN  , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_x509if_DistinguishedName },
575   { &hf_dsp_operationProgress, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_dsp_OperationProgress },
576   { &hf_dsp_traceInformation, BER_CLASS_CON, 3, 0, dissect_dsp_TraceInformation },
577   { &hf_dsp_aliasDereferenced, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL, dissect_dsp_BOOLEAN },
578   { &hf_dsp_aliasedRDNs     , BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL, dissect_dsp_INTEGER },
579   { &hf_dsp_returnCrossRefs , BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL, dissect_dsp_BOOLEAN },
580   { &hf_dsp_referenceType   , BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL, dissect_dsp_ReferenceType },
581   { &hf_dsp_info            , BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL, dissect_dsp_DomainInfo },
582   { &hf_dsp_timeLimit       , BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_dsp_Time },
583   { &hf_dsp_securityParameters, BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL, dissect_dap_SecurityParameters },
584   { &hf_dsp_entryOnly       , BER_CLASS_CON, 11, BER_FLAGS_OPTIONAL, dissect_dsp_BOOLEAN },
585   { &hf_dsp_uniqueIdentifier, BER_CLASS_CON, 12, BER_FLAGS_OPTIONAL, dissect_x509sat_UniqueIdentifier },
586   { &hf_dsp_authenticationLevel, BER_CLASS_CON, 13, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_dsp_AuthenticationLevel },
587   { &hf_dsp_exclusions      , BER_CLASS_CON, 14, BER_FLAGS_OPTIONAL, dissect_dsp_Exclusions },
588   { &hf_dsp_excludeShadows  , BER_CLASS_CON, 15, BER_FLAGS_OPTIONAL, dissect_dsp_BOOLEAN },
589   { &hf_dsp_nameResolveOnMaster, BER_CLASS_CON, 16, BER_FLAGS_OPTIONAL, dissect_dsp_BOOLEAN },
590   { &hf_dsp_operationIdentifier, BER_CLASS_CON, 17, BER_FLAGS_OPTIONAL, dissect_dsp_INTEGER },
591   { &hf_dsp_searchRuleId    , BER_CLASS_CON, 18, BER_FLAGS_OPTIONAL, dissect_x509if_SearchRuleId },
592   { &hf_dsp_chainedRelaxation, BER_CLASS_CON, 19, BER_FLAGS_OPTIONAL, dissect_x509if_MRMapping },
593   { &hf_dsp_relatedEntry    , BER_CLASS_CON, 20, BER_FLAGS_OPTIONAL, dissect_dsp_INTEGER },
594   { &hf_dsp_dspPaging       , BER_CLASS_CON, 21, BER_FLAGS_OPTIONAL, dissect_dsp_BOOLEAN },
595   { &hf_dsp_nonDapPdu       , BER_CLASS_CON, 22, BER_FLAGS_OPTIONAL, dissect_dsp_T_nonDapPdu },
596   { &hf_dsp_streamedResults , BER_CLASS_CON, 23, BER_FLAGS_OPTIONAL, dissect_dsp_INTEGER },
597   { &hf_dsp_excludeWriteableCopies, BER_CLASS_CON, 24, BER_FLAGS_OPTIONAL, dissect_dsp_BOOLEAN },
598   { NULL, 0, 0, 0, NULL }
599 };
600
601 static int
602 dissect_dsp_ChainingArguments(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
603   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
604                               ChainingArguments_set, hf_index, ett_dsp_ChainingArguments);
605
606   return offset;
607 }
608
609
610 static const ber_sequence_t ChainedReadArgumentData_set[] = {
611   { &hf_dsp_chainedArgument , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainingArguments },
612   { &hf_dsp_readArgument    , BER_CLASS_CON, 0, 0, dissect_dap_ReadArgument },
613   { NULL, 0, 0, 0, NULL }
614 };
615
616 static int
617 dissect_dsp_ChainedReadArgumentData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
618   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
619                               ChainedReadArgumentData_set, hf_index, ett_dsp_ChainedReadArgumentData);
620
621   return offset;
622 }
623
624
625
626 static int
627 dissect_dsp_BIT_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
628   offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
629                                     NULL, hf_index, -1,
630                                     NULL);
631
632   return offset;
633 }
634
635
636 static const ber_sequence_t T_signedChainedReadArgument_sequence[] = {
637   { &hf_dsp_chainedReadArgument, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedReadArgumentData },
638   { &hf_dsp_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
639   { &hf_dsp_encrypted       , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_dsp_BIT_STRING },
640   { NULL, 0, 0, 0, NULL }
641 };
642
643 static int
644 dissect_dsp_T_signedChainedReadArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
645   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
646                                    T_signedChainedReadArgument_sequence, hf_index, ett_dsp_T_signedChainedReadArgument);
647
648   return offset;
649 }
650
651
652 static const value_string dsp_ChainedReadArgument_vals[] = {
653   {   0, "unsignedChainedReadArgument" },
654   {   1, "signedChainedReadArgument" },
655   { 0, NULL }
656 };
657
658 static const ber_choice_t ChainedReadArgument_choice[] = {
659   {   0, &hf_dsp_unsignedChainedReadArgument, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedReadArgumentData },
660   {   1, &hf_dsp_signedChainedReadArgument, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dsp_T_signedChainedReadArgument },
661   { 0, NULL, 0, 0, 0, NULL }
662 };
663
664 static int
665 dissect_dsp_ChainedReadArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
666   offset = dissect_ber_choice(actx, tree, tvb, offset,
667                                  ChainedReadArgument_choice, hf_index, ett_dsp_ChainedReadArgument,
668                                  NULL);
669
670   return offset;
671 }
672
673
674 static const ber_sequence_t SET_OF_ProtocolInformation_set_of[1] = {
675   { &hf_dsp_protocolInformation_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509sat_ProtocolInformation },
676 };
677
678 static int
679 dissect_dsp_SET_OF_ProtocolInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
680   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
681                                  SET_OF_ProtocolInformation_set_of, hf_index, ett_dsp_SET_OF_ProtocolInformation);
682
683   return offset;
684 }
685
686
687 static const value_string dsp_T_category_vals[] = {
688   {   0, "master" },
689   {   1, "shadow" },
690   { 0, NULL }
691 };
692
693
694 static int
695 dissect_dsp_T_category(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
696   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
697                                   NULL);
698
699   return offset;
700 }
701
702
703 static const value_string dsp_APCategory_vals[] = {
704   {   0, "master" },
705   {   1, "shadow" },
706   { 0, NULL }
707 };
708
709
710 static int
711 dissect_dsp_APCategory(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
712   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
713                                   NULL);
714
715   return offset;
716 }
717
718
719 static const ber_sequence_t MasterOrShadowAccessPoint_set[] = {
720   { &hf_dsp_ae_title        , BER_CLASS_CON, 0, 0, dissect_x509if_Name },
721   { &hf_dsp_address         , BER_CLASS_CON, 1, 0, dissect_x509sat_PresentationAddress },
722   { &hf_dsp_protocolInformation, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_dsp_SET_OF_ProtocolInformation },
723   { &hf_dsp_access_point_category, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_dsp_APCategory },
724   { &hf_dsp_chainingRequired, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL, dissect_dsp_BOOLEAN },
725   { NULL, 0, 0, 0, NULL }
726 };
727
728 static int
729 dissect_dsp_MasterOrShadowAccessPoint(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
730   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
731                               MasterOrShadowAccessPoint_set, hf_index, ett_dsp_MasterOrShadowAccessPoint);
732
733   return offset;
734 }
735
736
737 static const ber_sequence_t MasterAndShadowAccessPoints_set_of[1] = {
738   { &hf_dsp_MasterAndShadowAccessPoints_item, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_MasterOrShadowAccessPoint },
739 };
740
741 int
742 dissect_dsp_MasterAndShadowAccessPoints(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
743   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
744                                  MasterAndShadowAccessPoints_set_of, hf_index, ett_dsp_MasterAndShadowAccessPoints);
745
746   return offset;
747 }
748
749
750 static const ber_sequence_t AccessPointInformation_set[] = {
751   { &hf_dsp_ae_title        , BER_CLASS_CON, 0, 0, dissect_x509if_Name },
752   { &hf_dsp_address         , BER_CLASS_CON, 1, 0, dissect_x509sat_PresentationAddress },
753   { &hf_dsp_protocolInformation, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_dsp_SET_OF_ProtocolInformation },
754   { &hf_dsp_category        , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_dsp_T_category },
755   { &hf_dsp_chainingRequired, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL, dissect_dsp_BOOLEAN },
756   { &hf_dsp_additionalPoints, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL, dissect_dsp_MasterAndShadowAccessPoints },
757   { NULL, 0, 0, 0, NULL }
758 };
759
760 int
761 dissect_dsp_AccessPointInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
762   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
763                               AccessPointInformation_set, hf_index, ett_dsp_AccessPointInformation);
764
765   return offset;
766 }
767
768
769 static const ber_sequence_t CrossReference_set[] = {
770   { &hf_dsp_contextPrefix   , BER_CLASS_CON, 0, 0, dissect_x509if_DistinguishedName },
771   { &hf_dsp_accessPoint     , BER_CLASS_CON, 1, 0, dissect_dsp_AccessPointInformation },
772   { NULL, 0, 0, 0, NULL }
773 };
774
775 static int
776 dissect_dsp_CrossReference(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
777   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
778                               CrossReference_set, hf_index, ett_dsp_CrossReference);
779
780   return offset;
781 }
782
783
784 static const ber_sequence_t SEQUENCE_OF_CrossReference_sequence_of[1] = {
785   { &hf_dsp_crossReferences_item, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_CrossReference },
786 };
787
788 static int
789 dissect_dsp_SEQUENCE_OF_CrossReference(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
790   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
791                                       SEQUENCE_OF_CrossReference_sequence_of, hf_index, ett_dsp_SEQUENCE_OF_CrossReference);
792
793   return offset;
794 }
795
796
797 static const ber_sequence_t ChainingResults_set[] = {
798   { &hf_dsp_info            , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_dsp_DomainInfo },
799   { &hf_dsp_crossReferences , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_dsp_SEQUENCE_OF_CrossReference },
800   { &hf_dsp_securityParameters, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_dap_SecurityParameters },
801   { &hf_dsp_alreadySearched , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_dsp_Exclusions },
802   { NULL, 0, 0, 0, NULL }
803 };
804
805 static int
806 dissect_dsp_ChainingResults(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
807   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
808                               ChainingResults_set, hf_index, ett_dsp_ChainingResults);
809
810   return offset;
811 }
812
813
814 static const ber_sequence_t ChainedReadResultData_set[] = {
815   { &hf_dsp_chainedResults  , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainingResults },
816   { &hf_dsp_readResult      , BER_CLASS_CON, 0, 0, dissect_dap_ReadResult },
817   { NULL, 0, 0, 0, NULL }
818 };
819
820 static int
821 dissect_dsp_ChainedReadResultData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
822   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
823                               ChainedReadResultData_set, hf_index, ett_dsp_ChainedReadResultData);
824
825   return offset;
826 }
827
828
829 static const ber_sequence_t T_signedChainedReadResult_sequence[] = {
830   { &hf_dsp_chainedReadResult, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedReadResultData },
831   { &hf_dsp_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
832   { &hf_dsp_encrypted       , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_dsp_BIT_STRING },
833   { NULL, 0, 0, 0, NULL }
834 };
835
836 static int
837 dissect_dsp_T_signedChainedReadResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
838   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
839                                    T_signedChainedReadResult_sequence, hf_index, ett_dsp_T_signedChainedReadResult);
840
841   return offset;
842 }
843
844
845 static const value_string dsp_ChainedReadResult_vals[] = {
846   {   0, "unsignedChainedReadResult" },
847   {   1, "signedChainedReadResult" },
848   { 0, NULL }
849 };
850
851 static const ber_choice_t ChainedReadResult_choice[] = {
852   {   0, &hf_dsp_unsignedChainedReadResult, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedReadResultData },
853   {   1, &hf_dsp_signedChainedReadResult, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dsp_T_signedChainedReadResult },
854   { 0, NULL, 0, 0, 0, NULL }
855 };
856
857 static int
858 dissect_dsp_ChainedReadResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
859   offset = dissect_ber_choice(actx, tree, tvb, offset,
860                                  ChainedReadResult_choice, hf_index, ett_dsp_ChainedReadResult,
861                                  NULL);
862
863   return offset;
864 }
865
866
867 static const ber_sequence_t ChainedCompareArgumentData_set[] = {
868   { &hf_dsp_chainedArgument , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainingArguments },
869   { &hf_dsp_compareArgument , BER_CLASS_CON, 0, 0, dissect_dap_CompareArgument },
870   { NULL, 0, 0, 0, NULL }
871 };
872
873 static int
874 dissect_dsp_ChainedCompareArgumentData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
875   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
876                               ChainedCompareArgumentData_set, hf_index, ett_dsp_ChainedCompareArgumentData);
877
878   return offset;
879 }
880
881
882 static const ber_sequence_t T_signedChainedCompareArgument_sequence[] = {
883   { &hf_dsp_chainedCompareArgument, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedCompareArgumentData },
884   { &hf_dsp_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
885   { &hf_dsp_encrypted       , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_dsp_BIT_STRING },
886   { NULL, 0, 0, 0, NULL }
887 };
888
889 static int
890 dissect_dsp_T_signedChainedCompareArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
891   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
892                                    T_signedChainedCompareArgument_sequence, hf_index, ett_dsp_T_signedChainedCompareArgument);
893
894   return offset;
895 }
896
897
898 static const value_string dsp_ChainedCompareArgument_vals[] = {
899   {   0, "unsignedChainedCompareArgument" },
900   {   1, "signedChainedCompareArgument" },
901   { 0, NULL }
902 };
903
904 static const ber_choice_t ChainedCompareArgument_choice[] = {
905   {   0, &hf_dsp_unsignedChainedCompareArgument, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedCompareArgumentData },
906   {   1, &hf_dsp_signedChainedCompareArgument, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dsp_T_signedChainedCompareArgument },
907   { 0, NULL, 0, 0, 0, NULL }
908 };
909
910 static int
911 dissect_dsp_ChainedCompareArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
912   offset = dissect_ber_choice(actx, tree, tvb, offset,
913                                  ChainedCompareArgument_choice, hf_index, ett_dsp_ChainedCompareArgument,
914                                  NULL);
915
916   return offset;
917 }
918
919
920 static const ber_sequence_t ChainedCompareResultData_set[] = {
921   { &hf_dsp_chainedResults  , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainingResults },
922   { &hf_dsp_compareResult   , BER_CLASS_CON, 0, 0, dissect_dap_CompareResult },
923   { NULL, 0, 0, 0, NULL }
924 };
925
926 static int
927 dissect_dsp_ChainedCompareResultData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
928   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
929                               ChainedCompareResultData_set, hf_index, ett_dsp_ChainedCompareResultData);
930
931   return offset;
932 }
933
934
935 static const ber_sequence_t T_signedChainedCompareResult_sequence[] = {
936   { &hf_dsp_chainedCompareResult, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedCompareResultData },
937   { &hf_dsp_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
938   { &hf_dsp_encrypted       , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_dsp_BIT_STRING },
939   { NULL, 0, 0, 0, NULL }
940 };
941
942 static int
943 dissect_dsp_T_signedChainedCompareResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
944   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
945                                    T_signedChainedCompareResult_sequence, hf_index, ett_dsp_T_signedChainedCompareResult);
946
947   return offset;
948 }
949
950
951 static const value_string dsp_ChainedCompareResult_vals[] = {
952   {   0, "unsignedChainedCompareResult" },
953   {   1, "signedChainedCompareResult" },
954   { 0, NULL }
955 };
956
957 static const ber_choice_t ChainedCompareResult_choice[] = {
958   {   0, &hf_dsp_unsignedChainedCompareResult, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedCompareResultData },
959   {   1, &hf_dsp_signedChainedCompareResult, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dsp_T_signedChainedCompareResult },
960   { 0, NULL, 0, 0, 0, NULL }
961 };
962
963 static int
964 dissect_dsp_ChainedCompareResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
965   offset = dissect_ber_choice(actx, tree, tvb, offset,
966                                  ChainedCompareResult_choice, hf_index, ett_dsp_ChainedCompareResult,
967                                  NULL);
968
969   return offset;
970 }
971
972
973
974 static int
975 dissect_dsp_ChainedAbandonArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
976   offset = dissect_dap_AbandonArgument(implicit_tag, tvb, offset, actx, tree, hf_index);
977
978   return offset;
979 }
980
981
982
983 static int
984 dissect_dsp_ChainedAbandonResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
985   offset = dissect_dap_AbandonResult(implicit_tag, tvb, offset, actx, tree, hf_index);
986
987   return offset;
988 }
989
990
991 static const ber_sequence_t ChainedListArgumentData_set[] = {
992   { &hf_dsp_chainedArgument , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainingArguments },
993   { &hf_dsp_listArgument    , BER_CLASS_CON, 0, 0, dissect_dap_ListArgument },
994   { NULL, 0, 0, 0, NULL }
995 };
996
997 static int
998 dissect_dsp_ChainedListArgumentData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
999   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
1000                               ChainedListArgumentData_set, hf_index, ett_dsp_ChainedListArgumentData);
1001
1002   return offset;
1003 }
1004
1005
1006 static const ber_sequence_t T_signedChainedListArgument_sequence[] = {
1007   { &hf_dsp_chainedListArgument, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedListArgumentData },
1008   { &hf_dsp_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
1009   { &hf_dsp_encrypted       , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_dsp_BIT_STRING },
1010   { NULL, 0, 0, 0, NULL }
1011 };
1012
1013 static int
1014 dissect_dsp_T_signedChainedListArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1015   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1016                                    T_signedChainedListArgument_sequence, hf_index, ett_dsp_T_signedChainedListArgument);
1017
1018   return offset;
1019 }
1020
1021
1022 static const value_string dsp_ChainedListArgument_vals[] = {
1023   {   0, "unsignedChainedListArgument" },
1024   {   1, "signedChainedListArgument" },
1025   { 0, NULL }
1026 };
1027
1028 static const ber_choice_t ChainedListArgument_choice[] = {
1029   {   0, &hf_dsp_unsignedChainedListArgument, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedListArgumentData },
1030   {   1, &hf_dsp_signedChainedListArgument, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dsp_T_signedChainedListArgument },
1031   { 0, NULL, 0, 0, 0, NULL }
1032 };
1033
1034 static int
1035 dissect_dsp_ChainedListArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1036   offset = dissect_ber_choice(actx, tree, tvb, offset,
1037                                  ChainedListArgument_choice, hf_index, ett_dsp_ChainedListArgument,
1038                                  NULL);
1039
1040   return offset;
1041 }
1042
1043
1044 static const ber_sequence_t ChainedListResultData_set[] = {
1045   { &hf_dsp_chainedResults  , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainingResults },
1046   { &hf_dsp_listResult      , BER_CLASS_CON, 0, 0, dissect_dap_ListResult },
1047   { NULL, 0, 0, 0, NULL }
1048 };
1049
1050 static int
1051 dissect_dsp_ChainedListResultData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1052   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
1053                               ChainedListResultData_set, hf_index, ett_dsp_ChainedListResultData);
1054
1055   return offset;
1056 }
1057
1058
1059 static const ber_sequence_t T_signedChainedListResult_sequence[] = {
1060   { &hf_dsp_chainedListResult, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedListResultData },
1061   { &hf_dsp_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
1062   { &hf_dsp_encrypted       , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_dsp_BIT_STRING },
1063   { NULL, 0, 0, 0, NULL }
1064 };
1065
1066 static int
1067 dissect_dsp_T_signedChainedListResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1068   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1069                                    T_signedChainedListResult_sequence, hf_index, ett_dsp_T_signedChainedListResult);
1070
1071   return offset;
1072 }
1073
1074
1075 static const value_string dsp_ChainedListResult_vals[] = {
1076   {   0, "unsignedChainedListResult" },
1077   {   1, "signedChainedListResult" },
1078   { 0, NULL }
1079 };
1080
1081 static const ber_choice_t ChainedListResult_choice[] = {
1082   {   0, &hf_dsp_unsignedChainedListResult, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedListResultData },
1083   {   1, &hf_dsp_signedChainedListResult, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dsp_T_signedChainedListResult },
1084   { 0, NULL, 0, 0, 0, NULL }
1085 };
1086
1087 static int
1088 dissect_dsp_ChainedListResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1089   offset = dissect_ber_choice(actx, tree, tvb, offset,
1090                                  ChainedListResult_choice, hf_index, ett_dsp_ChainedListResult,
1091                                  NULL);
1092
1093   return offset;
1094 }
1095
1096
1097 static const ber_sequence_t ChainedSearchArgumentData_set[] = {
1098   { &hf_dsp_chainedArgument , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainingArguments },
1099   { &hf_dsp_searchArgument  , BER_CLASS_CON, 0, 0, dissect_dap_SearchArgument },
1100   { NULL, 0, 0, 0, NULL }
1101 };
1102
1103 static int
1104 dissect_dsp_ChainedSearchArgumentData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1105   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
1106                               ChainedSearchArgumentData_set, hf_index, ett_dsp_ChainedSearchArgumentData);
1107
1108   return offset;
1109 }
1110
1111
1112 static const ber_sequence_t T_signedChainedSearchArgument_sequence[] = {
1113   { &hf_dsp_chainedSearchArgument, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedSearchArgumentData },
1114   { &hf_dsp_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
1115   { &hf_dsp_encrypted       , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_dsp_BIT_STRING },
1116   { NULL, 0, 0, 0, NULL }
1117 };
1118
1119 static int
1120 dissect_dsp_T_signedChainedSearchArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1121   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1122                                    T_signedChainedSearchArgument_sequence, hf_index, ett_dsp_T_signedChainedSearchArgument);
1123
1124   return offset;
1125 }
1126
1127
1128 static const value_string dsp_ChainedSearchArgument_vals[] = {
1129   {   0, "unsignedChainedSearchArgument" },
1130   {   1, "signedChainedSearchArgument" },
1131   { 0, NULL }
1132 };
1133
1134 static const ber_choice_t ChainedSearchArgument_choice[] = {
1135   {   0, &hf_dsp_unsignedChainedSearchArgument, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedSearchArgumentData },
1136   {   1, &hf_dsp_signedChainedSearchArgument, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dsp_T_signedChainedSearchArgument },
1137   { 0, NULL, 0, 0, 0, NULL }
1138 };
1139
1140 static int
1141 dissect_dsp_ChainedSearchArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1142   offset = dissect_ber_choice(actx, tree, tvb, offset,
1143                                  ChainedSearchArgument_choice, hf_index, ett_dsp_ChainedSearchArgument,
1144                                  NULL);
1145
1146   return offset;
1147 }
1148
1149
1150 static const ber_sequence_t ChainedSearchResultData_set[] = {
1151   { &hf_dsp_chainedResults  , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainingResults },
1152   { &hf_dsp_searchResult    , BER_CLASS_CON, 0, 0, dissect_dap_SearchResult },
1153   { NULL, 0, 0, 0, NULL }
1154 };
1155
1156 static int
1157 dissect_dsp_ChainedSearchResultData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1158   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
1159                               ChainedSearchResultData_set, hf_index, ett_dsp_ChainedSearchResultData);
1160
1161   return offset;
1162 }
1163
1164
1165 static const ber_sequence_t T_signedChainedSearchResult_sequence[] = {
1166   { &hf_dsp_chainedSearchResult, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedSearchResultData },
1167   { &hf_dsp_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
1168   { &hf_dsp_encrypted       , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_dsp_BIT_STRING },
1169   { NULL, 0, 0, 0, NULL }
1170 };
1171
1172 static int
1173 dissect_dsp_T_signedChainedSearchResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1174   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1175                                    T_signedChainedSearchResult_sequence, hf_index, ett_dsp_T_signedChainedSearchResult);
1176
1177   return offset;
1178 }
1179
1180
1181 static const value_string dsp_ChainedSearchResult_vals[] = {
1182   {   0, "unsignedChainedSearchResult" },
1183   {   1, "signedChainedSearchResult" },
1184   { 0, NULL }
1185 };
1186
1187 static const ber_choice_t ChainedSearchResult_choice[] = {
1188   {   0, &hf_dsp_unsignedChainedSearchResult, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedSearchResultData },
1189   {   1, &hf_dsp_signedChainedSearchResult, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dsp_T_signedChainedSearchResult },
1190   { 0, NULL, 0, 0, 0, NULL }
1191 };
1192
1193 static int
1194 dissect_dsp_ChainedSearchResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1195   offset = dissect_ber_choice(actx, tree, tvb, offset,
1196                                  ChainedSearchResult_choice, hf_index, ett_dsp_ChainedSearchResult,
1197                                  NULL);
1198
1199   return offset;
1200 }
1201
1202
1203 static const ber_sequence_t ChainedAddEntryArgumentData_set[] = {
1204   { &hf_dsp_chainedArgument , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainingArguments },
1205   { &hf_dsp_addEntryArgument, BER_CLASS_CON, 0, 0, dissect_dap_AddEntryArgument },
1206   { NULL, 0, 0, 0, NULL }
1207 };
1208
1209 static int
1210 dissect_dsp_ChainedAddEntryArgumentData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1211   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
1212                               ChainedAddEntryArgumentData_set, hf_index, ett_dsp_ChainedAddEntryArgumentData);
1213
1214   return offset;
1215 }
1216
1217
1218 static const ber_sequence_t T_signedChainedAddEntryArgument_sequence[] = {
1219   { &hf_dsp_chainedAddEntryArgument, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedAddEntryArgumentData },
1220   { &hf_dsp_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
1221   { &hf_dsp_encrypted       , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_dsp_BIT_STRING },
1222   { NULL, 0, 0, 0, NULL }
1223 };
1224
1225 static int
1226 dissect_dsp_T_signedChainedAddEntryArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1227   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1228                                    T_signedChainedAddEntryArgument_sequence, hf_index, ett_dsp_T_signedChainedAddEntryArgument);
1229
1230   return offset;
1231 }
1232
1233
1234 static const value_string dsp_ChainedAddEntryArgument_vals[] = {
1235   {   0, "unsignedChainedAddEntryArgument" },
1236   {   1, "signedChainedAddEntryArgument" },
1237   { 0, NULL }
1238 };
1239
1240 static const ber_choice_t ChainedAddEntryArgument_choice[] = {
1241   {   0, &hf_dsp_unsignedChainedAddEntryArgument, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedAddEntryArgumentData },
1242   {   1, &hf_dsp_signedChainedAddEntryArgument, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dsp_T_signedChainedAddEntryArgument },
1243   { 0, NULL, 0, 0, 0, NULL }
1244 };
1245
1246 static int
1247 dissect_dsp_ChainedAddEntryArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1248   offset = dissect_ber_choice(actx, tree, tvb, offset,
1249                                  ChainedAddEntryArgument_choice, hf_index, ett_dsp_ChainedAddEntryArgument,
1250                                  NULL);
1251
1252   return offset;
1253 }
1254
1255
1256 static const ber_sequence_t ChainedAddEntryResultData_set[] = {
1257   { &hf_dsp_chainedResults  , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainingResults },
1258   { &hf_dsp_addEntryResult  , BER_CLASS_CON, 0, 0, dissect_dap_AddEntryResult },
1259   { NULL, 0, 0, 0, NULL }
1260 };
1261
1262 static int
1263 dissect_dsp_ChainedAddEntryResultData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1264   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
1265                               ChainedAddEntryResultData_set, hf_index, ett_dsp_ChainedAddEntryResultData);
1266
1267   return offset;
1268 }
1269
1270
1271 static const ber_sequence_t T_signedChainedAddEntryResult_sequence[] = {
1272   { &hf_dsp_chainedAddEntryResult, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedAddEntryResultData },
1273   { &hf_dsp_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
1274   { &hf_dsp_encrypted       , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_dsp_BIT_STRING },
1275   { NULL, 0, 0, 0, NULL }
1276 };
1277
1278 static int
1279 dissect_dsp_T_signedChainedAddEntryResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1280   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1281                                    T_signedChainedAddEntryResult_sequence, hf_index, ett_dsp_T_signedChainedAddEntryResult);
1282
1283   return offset;
1284 }
1285
1286
1287 static const value_string dsp_ChainedAddEntryResult_vals[] = {
1288   {   0, "unsignedChainedAddEntryResult" },
1289   {   1, "signedChainedAddEntryResult" },
1290   { 0, NULL }
1291 };
1292
1293 static const ber_choice_t ChainedAddEntryResult_choice[] = {
1294   {   0, &hf_dsp_unsignedChainedAddEntryResult, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedAddEntryResultData },
1295   {   1, &hf_dsp_signedChainedAddEntryResult, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dsp_T_signedChainedAddEntryResult },
1296   { 0, NULL, 0, 0, 0, NULL }
1297 };
1298
1299 static int
1300 dissect_dsp_ChainedAddEntryResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1301   offset = dissect_ber_choice(actx, tree, tvb, offset,
1302                                  ChainedAddEntryResult_choice, hf_index, ett_dsp_ChainedAddEntryResult,
1303                                  NULL);
1304
1305   return offset;
1306 }
1307
1308
1309 static const ber_sequence_t ChainedRemoveEntryArgumentData_set[] = {
1310   { &hf_dsp_chainedArgument , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainingArguments },
1311   { &hf_dsp_removeEntryArgument, BER_CLASS_CON, 0, 0, dissect_dap_RemoveEntryArgument },
1312   { NULL, 0, 0, 0, NULL }
1313 };
1314
1315 static int
1316 dissect_dsp_ChainedRemoveEntryArgumentData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1317   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
1318                               ChainedRemoveEntryArgumentData_set, hf_index, ett_dsp_ChainedRemoveEntryArgumentData);
1319
1320   return offset;
1321 }
1322
1323
1324 static const ber_sequence_t T_signedChainedRemoveEntryArgument_sequence[] = {
1325   { &hf_dsp_chainedRemoveEntryArgument, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedRemoveEntryArgumentData },
1326   { &hf_dsp_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
1327   { &hf_dsp_encrypted       , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_dsp_BIT_STRING },
1328   { NULL, 0, 0, 0, NULL }
1329 };
1330
1331 static int
1332 dissect_dsp_T_signedChainedRemoveEntryArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1333   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1334                                    T_signedChainedRemoveEntryArgument_sequence, hf_index, ett_dsp_T_signedChainedRemoveEntryArgument);
1335
1336   return offset;
1337 }
1338
1339
1340 static const value_string dsp_ChainedRemoveEntryArgument_vals[] = {
1341   {   0, "unsignedChainedRemoveEntryArgument" },
1342   {   1, "signedChainedRemoveEntryArgument" },
1343   { 0, NULL }
1344 };
1345
1346 static const ber_choice_t ChainedRemoveEntryArgument_choice[] = {
1347   {   0, &hf_dsp_unsignedChainedRemoveEntryArgument, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedRemoveEntryArgumentData },
1348   {   1, &hf_dsp_signedChainedRemoveEntryArgument, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dsp_T_signedChainedRemoveEntryArgument },
1349   { 0, NULL, 0, 0, 0, NULL }
1350 };
1351
1352 static int
1353 dissect_dsp_ChainedRemoveEntryArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1354   offset = dissect_ber_choice(actx, tree, tvb, offset,
1355                                  ChainedRemoveEntryArgument_choice, hf_index, ett_dsp_ChainedRemoveEntryArgument,
1356                                  NULL);
1357
1358   return offset;
1359 }
1360
1361
1362 static const ber_sequence_t ChainedRemoveEntryResultData_set[] = {
1363   { &hf_dsp_chainedResults  , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainingResults },
1364   { &hf_dsp_removeEntryResult, BER_CLASS_CON, 0, 0, dissect_dap_RemoveEntryResult },
1365   { NULL, 0, 0, 0, NULL }
1366 };
1367
1368 static int
1369 dissect_dsp_ChainedRemoveEntryResultData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1370   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
1371                               ChainedRemoveEntryResultData_set, hf_index, ett_dsp_ChainedRemoveEntryResultData);
1372
1373   return offset;
1374 }
1375
1376
1377 static const ber_sequence_t T_signedChainedRemoveEntryResult_sequence[] = {
1378   { &hf_dsp_chainedRemoveEntryResult, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedRemoveEntryResultData },
1379   { &hf_dsp_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
1380   { &hf_dsp_encrypted       , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_dsp_BIT_STRING },
1381   { NULL, 0, 0, 0, NULL }
1382 };
1383
1384 static int
1385 dissect_dsp_T_signedChainedRemoveEntryResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1386   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1387                                    T_signedChainedRemoveEntryResult_sequence, hf_index, ett_dsp_T_signedChainedRemoveEntryResult);
1388
1389   return offset;
1390 }
1391
1392
1393 static const value_string dsp_ChainedRemoveEntryResult_vals[] = {
1394   {   0, "unsignedChainedRemoveEntryResult" },
1395   {   1, "signedChainedRemoveEntryResult" },
1396   { 0, NULL }
1397 };
1398
1399 static const ber_choice_t ChainedRemoveEntryResult_choice[] = {
1400   {   0, &hf_dsp_unsignedChainedRemoveEntryResult, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedRemoveEntryResultData },
1401   {   1, &hf_dsp_signedChainedRemoveEntryResult, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dsp_T_signedChainedRemoveEntryResult },
1402   { 0, NULL, 0, 0, 0, NULL }
1403 };
1404
1405 static int
1406 dissect_dsp_ChainedRemoveEntryResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1407   offset = dissect_ber_choice(actx, tree, tvb, offset,
1408                                  ChainedRemoveEntryResult_choice, hf_index, ett_dsp_ChainedRemoveEntryResult,
1409                                  NULL);
1410
1411   return offset;
1412 }
1413
1414
1415 static const ber_sequence_t ChainedModifyEntryArgumentData_set[] = {
1416   { &hf_dsp_chainedArgument , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainingArguments },
1417   { &hf_dsp_modifyEntryArgument, BER_CLASS_CON, 0, 0, dissect_dap_ModifyEntryArgument },
1418   { NULL, 0, 0, 0, NULL }
1419 };
1420
1421 static int
1422 dissect_dsp_ChainedModifyEntryArgumentData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1423   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
1424                               ChainedModifyEntryArgumentData_set, hf_index, ett_dsp_ChainedModifyEntryArgumentData);
1425
1426   return offset;
1427 }
1428
1429
1430 static const ber_sequence_t T_signedChainedModifyEntryArgument_sequence[] = {
1431   { &hf_dsp_chainedModifyEntryArgument, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedModifyEntryArgumentData },
1432   { &hf_dsp_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
1433   { &hf_dsp_encrypted       , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_dsp_BIT_STRING },
1434   { NULL, 0, 0, 0, NULL }
1435 };
1436
1437 static int
1438 dissect_dsp_T_signedChainedModifyEntryArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1439   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1440                                    T_signedChainedModifyEntryArgument_sequence, hf_index, ett_dsp_T_signedChainedModifyEntryArgument);
1441
1442   return offset;
1443 }
1444
1445
1446 static const value_string dsp_ChainedModifyEntryArgument_vals[] = {
1447   {   0, "unsignedChainedModifyEntryArgument" },
1448   {   1, "signedChainedModifyEntryArgument" },
1449   { 0, NULL }
1450 };
1451
1452 static const ber_choice_t ChainedModifyEntryArgument_choice[] = {
1453   {   0, &hf_dsp_unsignedChainedModifyEntryArgument, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedModifyEntryArgumentData },
1454   {   1, &hf_dsp_signedChainedModifyEntryArgument, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dsp_T_signedChainedModifyEntryArgument },
1455   { 0, NULL, 0, 0, 0, NULL }
1456 };
1457
1458 static int
1459 dissect_dsp_ChainedModifyEntryArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1460   offset = dissect_ber_choice(actx, tree, tvb, offset,
1461                                  ChainedModifyEntryArgument_choice, hf_index, ett_dsp_ChainedModifyEntryArgument,
1462                                  NULL);
1463
1464   return offset;
1465 }
1466
1467
1468 static const ber_sequence_t ChainedModifyEntryResultData_set[] = {
1469   { &hf_dsp_chainedResults  , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainingResults },
1470   { &hf_dsp_modifyEntryResult, BER_CLASS_CON, 0, 0, dissect_dap_ModifyEntryResult },
1471   { NULL, 0, 0, 0, NULL }
1472 };
1473
1474 static int
1475 dissect_dsp_ChainedModifyEntryResultData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1476   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
1477                               ChainedModifyEntryResultData_set, hf_index, ett_dsp_ChainedModifyEntryResultData);
1478
1479   return offset;
1480 }
1481
1482
1483 static const ber_sequence_t T_signedChainedModifyEntryResult_sequence[] = {
1484   { &hf_dsp_chainedModifyEntryResult, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedModifyEntryResultData },
1485   { &hf_dsp_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
1486   { &hf_dsp_encrypted       , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_dsp_BIT_STRING },
1487   { NULL, 0, 0, 0, NULL }
1488 };
1489
1490 static int
1491 dissect_dsp_T_signedChainedModifyEntryResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1492   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1493                                    T_signedChainedModifyEntryResult_sequence, hf_index, ett_dsp_T_signedChainedModifyEntryResult);
1494
1495   return offset;
1496 }
1497
1498
1499 static const value_string dsp_ChainedModifyEntryResult_vals[] = {
1500   {   0, "unsignedChainedModifyEntryResult" },
1501   {   1, "signedChainedModifyEntryResult" },
1502   { 0, NULL }
1503 };
1504
1505 static const ber_choice_t ChainedModifyEntryResult_choice[] = {
1506   {   0, &hf_dsp_unsignedChainedModifyEntryResult, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedModifyEntryResultData },
1507   {   1, &hf_dsp_signedChainedModifyEntryResult, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dsp_T_signedChainedModifyEntryResult },
1508   { 0, NULL, 0, 0, 0, NULL }
1509 };
1510
1511 static int
1512 dissect_dsp_ChainedModifyEntryResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1513   offset = dissect_ber_choice(actx, tree, tvb, offset,
1514                                  ChainedModifyEntryResult_choice, hf_index, ett_dsp_ChainedModifyEntryResult,
1515                                  NULL);
1516
1517   return offset;
1518 }
1519
1520
1521 static const ber_sequence_t ChainedModifyDNArgumentData_set[] = {
1522   { &hf_dsp_chainedArgument , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainingArguments },
1523   { &hf_dsp_modifyDNArgument, BER_CLASS_CON, 0, 0, dissect_dap_ModifyDNArgument },
1524   { NULL, 0, 0, 0, NULL }
1525 };
1526
1527 static int
1528 dissect_dsp_ChainedModifyDNArgumentData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1529   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
1530                               ChainedModifyDNArgumentData_set, hf_index, ett_dsp_ChainedModifyDNArgumentData);
1531
1532   return offset;
1533 }
1534
1535
1536 static const ber_sequence_t T_signedChainedModifyDNArgument_sequence[] = {
1537   { &hf_dsp_chainedModifyDNArgument, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedModifyDNArgumentData },
1538   { &hf_dsp_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
1539   { &hf_dsp_encrypted       , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_dsp_BIT_STRING },
1540   { NULL, 0, 0, 0, NULL }
1541 };
1542
1543 static int
1544 dissect_dsp_T_signedChainedModifyDNArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1545   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1546                                    T_signedChainedModifyDNArgument_sequence, hf_index, ett_dsp_T_signedChainedModifyDNArgument);
1547
1548   return offset;
1549 }
1550
1551
1552 static const value_string dsp_ChainedModifyDNArgument_vals[] = {
1553   {   0, "unsignedChainedModifyDNArgument" },
1554   {   1, "signedChainedModifyDNArgument" },
1555   { 0, NULL }
1556 };
1557
1558 static const ber_choice_t ChainedModifyDNArgument_choice[] = {
1559   {   0, &hf_dsp_unsignedChainedModifyDNArgument, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedModifyDNArgumentData },
1560   {   1, &hf_dsp_signedChainedModifyDNArgument, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dsp_T_signedChainedModifyDNArgument },
1561   { 0, NULL, 0, 0, 0, NULL }
1562 };
1563
1564 static int
1565 dissect_dsp_ChainedModifyDNArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1566   offset = dissect_ber_choice(actx, tree, tvb, offset,
1567                                  ChainedModifyDNArgument_choice, hf_index, ett_dsp_ChainedModifyDNArgument,
1568                                  NULL);
1569
1570   return offset;
1571 }
1572
1573
1574 static const ber_sequence_t ChainedModifyDNResultData_set[] = {
1575   { &hf_dsp_chainedResults  , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainingResults },
1576   { &hf_dsp_modifyDNResult  , BER_CLASS_CON, 0, 0, dissect_dap_ModifyDNResult },
1577   { NULL, 0, 0, 0, NULL }
1578 };
1579
1580 static int
1581 dissect_dsp_ChainedModifyDNResultData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1582   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
1583                               ChainedModifyDNResultData_set, hf_index, ett_dsp_ChainedModifyDNResultData);
1584
1585   return offset;
1586 }
1587
1588
1589 static const ber_sequence_t T_signedChainedModifyDNResult_sequence[] = {
1590   { &hf_dsp_chainedModifyDNResult, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedModifyDNResultData },
1591   { &hf_dsp_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
1592   { &hf_dsp_encrypted       , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_dsp_BIT_STRING },
1593   { NULL, 0, 0, 0, NULL }
1594 };
1595
1596 static int
1597 dissect_dsp_T_signedChainedModifyDNResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1598   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1599                                    T_signedChainedModifyDNResult_sequence, hf_index, ett_dsp_T_signedChainedModifyDNResult);
1600
1601   return offset;
1602 }
1603
1604
1605 static const value_string dsp_ChainedModifyDNResult_vals[] = {
1606   {   0, "unsignedChainedModifyDNResult" },
1607   {   1, "signedChainedModifyDNResult" },
1608   { 0, NULL }
1609 };
1610
1611 static const ber_choice_t ChainedModifyDNResult_choice[] = {
1612   {   0, &hf_dsp_unsignedChainedModifyDNResult, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_ChainedModifyDNResultData },
1613   {   1, &hf_dsp_signedChainedModifyDNResult, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dsp_T_signedChainedModifyDNResult },
1614   { 0, NULL, 0, 0, 0, NULL }
1615 };
1616
1617 static int
1618 dissect_dsp_ChainedModifyDNResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1619   offset = dissect_ber_choice(actx, tree, tvb, offset,
1620                                  ChainedModifyDNResult_choice, hf_index, ett_dsp_ChainedModifyDNResult,
1621                                  NULL);
1622
1623   return offset;
1624 }
1625
1626
1627 static const ber_sequence_t SET_OF_AccessPointInformation_set_of[1] = {
1628   { &hf_dsp_accessPoints_item, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_AccessPointInformation },
1629 };
1630
1631 static int
1632 dissect_dsp_SET_OF_AccessPointInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1633   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
1634                                  SET_OF_AccessPointInformation_set_of, hf_index, ett_dsp_SET_OF_AccessPointInformation);
1635
1636   return offset;
1637 }
1638
1639
1640 static const ber_sequence_t ContinuationReference_set[] = {
1641   { &hf_dsp_targetObject    , BER_CLASS_CON, 0, 0, dissect_x509if_Name },
1642   { &hf_dsp_aliasedRDNs     , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_dsp_INTEGER },
1643   { &hf_dsp_operationProgress, BER_CLASS_CON, 2, 0, dissect_dsp_OperationProgress },
1644   { &hf_dsp_rdnsResolved    , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_dsp_INTEGER },
1645   { &hf_dsp_referenceType   , BER_CLASS_CON, 4, 0, dissect_dsp_ReferenceType },
1646   { &hf_dsp_accessPoints_01 , BER_CLASS_CON, 5, 0, dissect_dsp_SET_OF_AccessPointInformation },
1647   { &hf_dsp_entryOnly       , BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL, dissect_dsp_BOOLEAN },
1648   { &hf_dsp_exclusions      , BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL, dissect_dsp_Exclusions },
1649   { &hf_dsp_returnToDUA     , BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL, dissect_dsp_BOOLEAN },
1650   { &hf_dsp_nameResolveOnMaster, BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL, dissect_dsp_BOOLEAN },
1651   { NULL, 0, 0, 0, NULL }
1652 };
1653
1654 int
1655 dissect_dsp_ContinuationReference(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1656   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
1657                               ContinuationReference_set, hf_index, ett_dsp_ContinuationReference);
1658
1659   return offset;
1660 }
1661
1662
1663 static const ber_sequence_t SEQUENCE_OF_Attribute_sequence_of[1] = {
1664   { &hf_dsp_notification_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_Attribute },
1665 };
1666
1667 static int
1668 dissect_dsp_SEQUENCE_OF_Attribute(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1669   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
1670                                       SEQUENCE_OF_Attribute_sequence_of, hf_index, ett_dsp_SEQUENCE_OF_Attribute);
1671
1672   return offset;
1673 }
1674
1675
1676 static const ber_sequence_t DSAReferralData_set[] = {
1677   { &hf_dsp_reference       , BER_CLASS_CON, 0, 0, dissect_dsp_ContinuationReference },
1678   { &hf_dsp_contextPrefix   , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_x509if_DistinguishedName },
1679   { &hf_dsp_securityParameters, BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL, dissect_dap_SecurityParameters },
1680   { &hf_dsp_performer       , BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL, dissect_x509if_DistinguishedName },
1681   { &hf_dsp_aliasDereferenced, BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL, dissect_dsp_BOOLEAN },
1682   { &hf_dsp_notification    , BER_CLASS_CON, 27, BER_FLAGS_OPTIONAL, dissect_dsp_SEQUENCE_OF_Attribute },
1683   { NULL, 0, 0, 0, NULL }
1684 };
1685
1686 static int
1687 dissect_dsp_DSAReferralData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1688   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
1689                               DSAReferralData_set, hf_index, ett_dsp_DSAReferralData);
1690
1691   return offset;
1692 }
1693
1694
1695 static const ber_sequence_t T_signedDSAReferral_sequence[] = {
1696   { &hf_dsp_dsaReferral     , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_DSAReferralData },
1697   { &hf_dsp_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
1698   { &hf_dsp_encrypted       , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_dsp_BIT_STRING },
1699   { NULL, 0, 0, 0, NULL }
1700 };
1701
1702 static int
1703 dissect_dsp_T_signedDSAReferral(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1704   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1705                                    T_signedDSAReferral_sequence, hf_index, ett_dsp_T_signedDSAReferral);
1706
1707   return offset;
1708 }
1709
1710
1711 static const value_string dsp_DSAReferral_vals[] = {
1712   {   0, "unsignedDSAReferral" },
1713   {   1, "signedDSAReferral" },
1714   { 0, NULL }
1715 };
1716
1717 static const ber_choice_t DSAReferral_choice[] = {
1718   {   0, &hf_dsp_unsignedDSAReferral, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_DSAReferralData },
1719   {   1, &hf_dsp_signedDSAReferral, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dsp_T_signedDSAReferral },
1720   { 0, NULL, 0, 0, 0, NULL }
1721 };
1722
1723 static int
1724 dissect_dsp_DSAReferral(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1725   offset = dissect_ber_choice(actx, tree, tvb, offset,
1726                                  DSAReferral_choice, hf_index, ett_dsp_DSAReferral,
1727                                  NULL);
1728
1729   return offset;
1730 }
1731
1732
1733
1734 static int
1735 dissect_dsp_LabeledURI(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1736   offset = dissect_x509sat_DirectoryString(implicit_tag, tvb, offset, actx, tree, hf_index);
1737
1738   return offset;
1739 }
1740
1741
1742 static const ber_sequence_t AccessPoint_set[] = {
1743   { &hf_dsp_ae_title        , BER_CLASS_CON, 0, 0, dissect_x509if_Name },
1744   { &hf_dsp_address         , BER_CLASS_CON, 1, 0, dissect_x509sat_PresentationAddress },
1745   { &hf_dsp_protocolInformation, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_dsp_SET_OF_ProtocolInformation },
1746   { &hf_dsp_labeledURI      , BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL, dissect_dsp_LabeledURI },
1747   { NULL, 0, 0, 0, NULL }
1748 };
1749
1750 int
1751 dissect_dsp_AccessPoint(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1752   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
1753                               AccessPoint_set, hf_index, ett_dsp_AccessPoint);
1754
1755   return offset;
1756 }
1757
1758
1759 static const ber_sequence_t DitBridgeKnowledge_sequence[] = {
1760   { &hf_dsp_domainLocalID   , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x509sat_DirectoryString },
1761   { &hf_dsp_accessPoints    , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_MasterAndShadowAccessPoints },
1762   { NULL, 0, 0, 0, NULL }
1763 };
1764
1765 static int
1766 dissect_dsp_DitBridgeKnowledge(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1767   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1768                                    DitBridgeKnowledge_sequence, hf_index, ett_dsp_DitBridgeKnowledge);
1769
1770   return offset;
1771 }
1772
1773 /*--- PDUs ---*/
1774
1775 static void dissect_AccessPoint_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1776   asn1_ctx_t asn1_ctx;
1777   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
1778   dissect_dsp_AccessPoint(FALSE, tvb, 0, &asn1_ctx, tree, hf_dsp_AccessPoint_PDU);
1779 }
1780 static void dissect_MasterAndShadowAccessPoints_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1781   asn1_ctx_t asn1_ctx;
1782   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
1783   dissect_dsp_MasterAndShadowAccessPoints(FALSE, tvb, 0, &asn1_ctx, tree, hf_dsp_MasterAndShadowAccessPoints_PDU);
1784 }
1785 static void dissect_DitBridgeKnowledge_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1786   asn1_ctx_t asn1_ctx;
1787   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
1788   dissect_dsp_DitBridgeKnowledge(FALSE, tvb, 0, &asn1_ctx, tree, hf_dsp_DitBridgeKnowledge_PDU);
1789 }
1790
1791
1792 /*--- End of included file: packet-dsp-fn.c ---*/
1793 #line 72 "packet-dsp-template.c"
1794
1795 /*
1796 * Dissect X518 PDUs inside a ROS PDUs
1797 */
1798 static void
1799 dissect_dsp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
1800 {
1801         int offset = 0;
1802         int old_offset;
1803         proto_item *item=NULL;
1804         proto_tree *tree=NULL;
1805         int (*dsp_dissector)(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index _U_) = NULL;
1806         char *dsp_op_name;
1807         asn1_ctx_t asn1_ctx;
1808
1809         asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
1810
1811         /* do we have operation information from the ROS dissector?  */
1812         if( !pinfo->private_data ){
1813                 if(parent_tree){
1814                         proto_tree_add_text(parent_tree, tvb, offset, -1,
1815                                 "Internal error: can't get operation information from ROS dissector.");
1816                 } 
1817                 return  ;
1818         } else {
1819                 session  = ( (struct SESSION_DATA_STRUCTURE*)(pinfo->private_data) );
1820         }
1821
1822         if(parent_tree){
1823                 item = proto_tree_add_item(parent_tree, proto_dsp, tvb, 0, -1, FALSE);
1824                 tree = proto_item_add_subtree(item, ett_dsp);
1825         }
1826         col_set_str(pinfo->cinfo, COL_PROTOCOL, "DAP");
1827         col_clear(pinfo->cinfo, COL_INFO);
1828
1829         switch(session->ros_op & ROS_OP_MASK) {
1830         case (ROS_OP_BIND | ROS_OP_ARGUMENT):   /*  BindInvoke */
1831           dsp_dissector = dissect_dsp_DSASystemBindArgument;
1832           dsp_op_name = "System-Bind-Argument";
1833           break;
1834         case (ROS_OP_BIND | ROS_OP_RESULT):     /*  BindResult */
1835           dsp_dissector = dissect_dsp_DSASystemBindResult;
1836           dsp_op_name = "System-Bind-Result";
1837           break;
1838         case (ROS_OP_BIND | ROS_OP_ERROR):      /*  BindError */
1839           dsp_dissector = dissect_dsp_DSASystemBindError;
1840           dsp_op_name = "System-Bind-Error";
1841           break;
1842         case (ROS_OP_INVOKE | ROS_OP_ARGUMENT): /*  Invoke Argument */
1843           switch(session->ros_op & ROS_OP_OPCODE_MASK) {
1844           case 1: /* read */
1845             dsp_dissector = dissect_dsp_ChainedReadArgument;
1846             dsp_op_name = "Chained-Read-Argument";
1847             break;
1848           case 2: /* compare */
1849             dsp_dissector = dissect_dsp_ChainedCompareArgument;
1850             dsp_op_name = "Chained-Compare-Argument";
1851             break;
1852           case 3: /* abandon */
1853             dsp_dissector = dissect_dsp_ChainedAbandonArgument;
1854             dsp_op_name = "Chained-Abandon-Argument";
1855             break;
1856           case 4: /* list */
1857             dsp_dissector = dissect_dsp_ChainedListArgument;
1858             dsp_op_name = "Chained-List-Argument";
1859             break;
1860           case 5: /* search */
1861             dsp_dissector = dissect_dsp_ChainedSearchArgument;
1862             dsp_op_name = "Chained-Search-Argument";
1863             break;
1864           case 6: /* addEntry */
1865             dsp_dissector = dissect_dsp_ChainedAddEntryArgument;
1866             dsp_op_name = "Chained-Add-Entry-Argument";
1867             break;
1868           case 7: /* removeEntry */
1869             dsp_dissector = dissect_dsp_ChainedRemoveEntryArgument;
1870             dsp_op_name = "Chained-Remove-Entry-Argument";
1871             break;
1872           case 8: /* modifyEntry */
1873             dsp_dissector = dissect_dsp_ChainedModifyEntryArgument;
1874             dsp_op_name = "ChainedModify-Entry-Argument";
1875             break;
1876           case 9: /* modifyDN */
1877             dsp_dissector = dissect_dsp_ChainedModifyDNArgument;
1878             dsp_op_name = "ChainedModify-DN-Argument";
1879             break;
1880           default:
1881             proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DSP opcode (%d)",
1882                                 session->ros_op & ROS_OP_OPCODE_MASK);
1883             break;
1884           }
1885           break;
1886         case (ROS_OP_INVOKE | ROS_OP_RESULT):   /*  Return Result */
1887           switch(session->ros_op & ROS_OP_OPCODE_MASK) {
1888           case 1: /* read */
1889             dsp_dissector = dissect_dsp_ChainedReadResult;
1890             dsp_op_name = "Chained-Read-Result";
1891             break;
1892           case 2: /* compare */
1893             dsp_dissector = dissect_dsp_ChainedCompareResult;
1894             dsp_op_name = "Chained-Compare-Result";
1895             break;
1896           case 3: /* abandon */
1897             dsp_dissector = dissect_dsp_ChainedAbandonResult;
1898             dsp_op_name = "Chained-Abandon-Result";
1899             break;
1900           case 4: /* list */
1901             dsp_dissector = dissect_dsp_ChainedListResult;
1902             dsp_op_name = "Chained-List-Result";
1903             break;
1904           case 5: /* search */
1905             dsp_dissector = dissect_dsp_ChainedSearchResult;
1906             dsp_op_name = "Chained-Search-Result";
1907             break;
1908           case 6: /* addEntry */
1909             dsp_dissector = dissect_dsp_ChainedAddEntryResult;
1910             dsp_op_name = "Chained-Add-Entry-Result";
1911             break;
1912           case 7: /* removeEntry */
1913             dsp_dissector = dissect_dsp_ChainedRemoveEntryResult;
1914             dsp_op_name = "Chained-Remove-Entry-Result";
1915             break;
1916           case 8: /* modifyEntry */
1917             dsp_dissector = dissect_dsp_ChainedModifyEntryResult;
1918             dsp_op_name = "Chained-Modify-Entry-Result";
1919             break;
1920           case 9: /* modifyDN */
1921             dsp_dissector = dissect_dsp_ChainedModifyDNResult;
1922             dsp_op_name = "ChainedModify-DN-Result";
1923             break;
1924           default:
1925             proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DSP opcode");
1926             break;
1927           }
1928           break;
1929         case (ROS_OP_INVOKE | ROS_OP_ERROR):    /*  Return Error */
1930           switch(session->ros_op & ROS_OP_OPCODE_MASK) {
1931           case 1: /* attributeError */
1932             dsp_dissector = dissect_dap_AttributeError;
1933             dsp_op_name = "Attribute-Error";
1934             break;
1935           case 2: /* nameError */
1936             dsp_dissector = dissect_dap_NameError;
1937             dsp_op_name = "Name-Error";
1938             break;
1939           case 3: /* serviceError */
1940             dsp_dissector = dissect_dap_ServiceError;
1941             dsp_op_name = "Service-Error";
1942             break;
1943           case 4: /* referral */
1944             dsp_dissector = dissect_dap_Referral;
1945             dsp_op_name = "Referral";
1946             break;
1947           case 5: /* abandoned */
1948             dsp_dissector = dissect_dap_Abandoned;
1949             dsp_op_name = "Abandoned";
1950             break;
1951           case 6: /* securityError */
1952             dsp_dissector = dissect_dap_SecurityError;
1953             dsp_op_name = "Security-Error";
1954             break;
1955           case 7: /* abandonFailed */
1956             dsp_dissector = dissect_dap_AbandonFailedError;
1957             dsp_op_name = "Abandon-Failed-Error";
1958             break;
1959           case 8: /* updateError */
1960             dsp_dissector = dissect_dap_UpdateError;
1961             dsp_op_name = "Update-Error";
1962             break;
1963           case 9: /* DSAReferral */
1964             dsp_dissector = dissect_dsp_DSAReferral;
1965             dsp_op_name = "DSA-Referral";
1966             break;
1967           default:
1968             proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DSP errcode");
1969             break;
1970           }
1971           break;
1972         default:
1973           proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DSP PDU");
1974           return;
1975         }
1976
1977         if(dsp_dissector) {
1978     col_set_str(pinfo->cinfo, COL_INFO, dsp_op_name);
1979
1980           while (tvb_reported_length_remaining(tvb, offset) > 0){
1981             old_offset=offset;
1982             offset=(*dsp_dissector)(FALSE, tvb, offset, &asn1_ctx, tree, -1);
1983             if(offset == old_offset){
1984               proto_tree_add_text(tree, tvb, offset, -1,"Internal error, zero-byte DSP PDU");
1985               break;
1986             }
1987           }
1988         }
1989 }
1990
1991
1992 /*--- proto_register_dsp -------------------------------------------*/
1993 void proto_register_dsp(void) {
1994
1995   /* List of fields */
1996   static hf_register_info hf[] =
1997   {
1998
1999 /*--- Included file: packet-dsp-hfarr.c ---*/
2000 #line 1 "packet-dsp-hfarr.c"
2001     { &hf_dsp_AccessPoint_PDU,
2002       { "AccessPoint", "dsp.AccessPoint",
2003         FT_NONE, BASE_NONE, NULL, 0,
2004         "dsp.AccessPoint", HFILL }},
2005     { &hf_dsp_MasterAndShadowAccessPoints_PDU,
2006       { "MasterAndShadowAccessPoints", "dsp.MasterAndShadowAccessPoints",
2007         FT_UINT32, BASE_DEC, NULL, 0,
2008         "dsp.MasterAndShadowAccessPoints", HFILL }},
2009     { &hf_dsp_DitBridgeKnowledge_PDU,
2010       { "DitBridgeKnowledge", "dsp.DitBridgeKnowledge",
2011         FT_NONE, BASE_NONE, NULL, 0,
2012         "dsp.DitBridgeKnowledge", HFILL }},
2013     { &hf_dsp_chainedArgument,
2014       { "chainedArgument", "dsp.chainedArgument",
2015         FT_NONE, BASE_NONE, NULL, 0,
2016         "dsp.ChainingArguments", HFILL }},
2017     { &hf_dsp_readArgument,
2018       { "readArgument", "dsp.readArgument",
2019         FT_UINT32, BASE_DEC, VALS(dap_ReadArgument_vals), 0,
2020         "dap.ReadArgument", HFILL }},
2021     { &hf_dsp_unsignedChainedReadArgument,
2022       { "unsignedChainedReadArgument", "dsp.unsignedChainedReadArgument",
2023         FT_NONE, BASE_NONE, NULL, 0,
2024         "dsp.ChainedReadArgumentData", HFILL }},
2025     { &hf_dsp_signedChainedReadArgument,
2026       { "signedChainedReadArgument", "dsp.signedChainedReadArgument",
2027         FT_NONE, BASE_NONE, NULL, 0,
2028         "dsp.T_signedChainedReadArgument", HFILL }},
2029     { &hf_dsp_chainedReadArgument,
2030       { "chainedReadArgument", "dsp.chainedReadArgument",
2031         FT_NONE, BASE_NONE, NULL, 0,
2032         "dsp.ChainedReadArgumentData", HFILL }},
2033     { &hf_dsp_algorithmIdentifier,
2034       { "algorithmIdentifier", "dsp.algorithmIdentifier",
2035         FT_NONE, BASE_NONE, NULL, 0,
2036         "x509af.AlgorithmIdentifier", HFILL }},
2037     { &hf_dsp_encrypted,
2038       { "encrypted", "dsp.encrypted",
2039         FT_BYTES, BASE_NONE, NULL, 0,
2040         "dsp.BIT_STRING", HFILL }},
2041     { &hf_dsp_chainedResults,
2042       { "chainedResults", "dsp.chainedResults",
2043         FT_NONE, BASE_NONE, NULL, 0,
2044         "dsp.ChainingResults", HFILL }},
2045     { &hf_dsp_readResult,
2046       { "readResult", "dsp.readResult",
2047         FT_UINT32, BASE_DEC, VALS(dap_ReadResult_vals), 0,
2048         "dap.ReadResult", HFILL }},
2049     { &hf_dsp_unsignedChainedReadResult,
2050       { "unsignedChainedReadResult", "dsp.unsignedChainedReadResult",
2051         FT_NONE, BASE_NONE, NULL, 0,
2052         "dsp.ChainedReadResultData", HFILL }},
2053     { &hf_dsp_signedChainedReadResult,
2054       { "signedChainedReadResult", "dsp.signedChainedReadResult",
2055         FT_NONE, BASE_NONE, NULL, 0,
2056         "dsp.T_signedChainedReadResult", HFILL }},
2057     { &hf_dsp_chainedReadResult,
2058       { "chainedReadResult", "dsp.chainedReadResult",
2059         FT_NONE, BASE_NONE, NULL, 0,
2060         "dsp.ChainedReadResultData", HFILL }},
2061     { &hf_dsp_compareArgument,
2062       { "compareArgument", "dsp.compareArgument",
2063         FT_UINT32, BASE_DEC, VALS(dap_CompareArgument_vals), 0,
2064         "dap.CompareArgument", HFILL }},
2065     { &hf_dsp_unsignedChainedCompareArgument,
2066       { "unsignedChainedCompareArgument", "dsp.unsignedChainedCompareArgument",
2067         FT_NONE, BASE_NONE, NULL, 0,
2068         "dsp.ChainedCompareArgumentData", HFILL }},
2069     { &hf_dsp_signedChainedCompareArgument,
2070       { "signedChainedCompareArgument", "dsp.signedChainedCompareArgument",
2071         FT_NONE, BASE_NONE, NULL, 0,
2072         "dsp.T_signedChainedCompareArgument", HFILL }},
2073     { &hf_dsp_chainedCompareArgument,
2074       { "chainedCompareArgument", "dsp.chainedCompareArgument",
2075         FT_NONE, BASE_NONE, NULL, 0,
2076         "dsp.ChainedCompareArgumentData", HFILL }},
2077     { &hf_dsp_compareResult,
2078       { "compareResult", "dsp.compareResult",
2079         FT_UINT32, BASE_DEC, VALS(dap_CompareResult_vals), 0,
2080         "dap.CompareResult", HFILL }},
2081     { &hf_dsp_unsignedChainedCompareResult,
2082       { "unsignedChainedCompareResult", "dsp.unsignedChainedCompareResult",
2083         FT_NONE, BASE_NONE, NULL, 0,
2084         "dsp.ChainedCompareResultData", HFILL }},
2085     { &hf_dsp_signedChainedCompareResult,
2086       { "signedChainedCompareResult", "dsp.signedChainedCompareResult",
2087         FT_NONE, BASE_NONE, NULL, 0,
2088         "dsp.T_signedChainedCompareResult", HFILL }},
2089     { &hf_dsp_chainedCompareResult,
2090       { "chainedCompareResult", "dsp.chainedCompareResult",
2091         FT_NONE, BASE_NONE, NULL, 0,
2092         "dsp.ChainedCompareResultData", HFILL }},
2093     { &hf_dsp_listArgument,
2094       { "listArgument", "dsp.listArgument",
2095         FT_UINT32, BASE_DEC, VALS(dap_ListArgument_vals), 0,
2096         "dap.ListArgument", HFILL }},
2097     { &hf_dsp_unsignedChainedListArgument,
2098       { "unsignedChainedListArgument", "dsp.unsignedChainedListArgument",
2099         FT_NONE, BASE_NONE, NULL, 0,
2100         "dsp.ChainedListArgumentData", HFILL }},
2101     { &hf_dsp_signedChainedListArgument,
2102       { "signedChainedListArgument", "dsp.signedChainedListArgument",
2103         FT_NONE, BASE_NONE, NULL, 0,
2104         "dsp.T_signedChainedListArgument", HFILL }},
2105     { &hf_dsp_chainedListArgument,
2106       { "chainedListArgument", "dsp.chainedListArgument",
2107         FT_NONE, BASE_NONE, NULL, 0,
2108         "dsp.ChainedListArgumentData", HFILL }},
2109     { &hf_dsp_listResult,
2110       { "listResult", "dsp.listResult",
2111         FT_UINT32, BASE_DEC, VALS(dap_ListResult_vals), 0,
2112         "dap.ListResult", HFILL }},
2113     { &hf_dsp_unsignedChainedListResult,
2114       { "unsignedChainedListResult", "dsp.unsignedChainedListResult",
2115         FT_NONE, BASE_NONE, NULL, 0,
2116         "dsp.ChainedListResultData", HFILL }},
2117     { &hf_dsp_signedChainedListResult,
2118       { "signedChainedListResult", "dsp.signedChainedListResult",
2119         FT_NONE, BASE_NONE, NULL, 0,
2120         "dsp.T_signedChainedListResult", HFILL }},
2121     { &hf_dsp_chainedListResult,
2122       { "chainedListResult", "dsp.chainedListResult",
2123         FT_NONE, BASE_NONE, NULL, 0,
2124         "dsp.ChainedListResultData", HFILL }},
2125     { &hf_dsp_searchArgument,
2126       { "searchArgument", "dsp.searchArgument",
2127         FT_UINT32, BASE_DEC, VALS(dap_SearchArgument_vals), 0,
2128         "dap.SearchArgument", HFILL }},
2129     { &hf_dsp_unsignedChainedSearchArgument,
2130       { "unsignedChainedSearchArgument", "dsp.unsignedChainedSearchArgument",
2131         FT_NONE, BASE_NONE, NULL, 0,
2132         "dsp.ChainedSearchArgumentData", HFILL }},
2133     { &hf_dsp_signedChainedSearchArgument,
2134       { "signedChainedSearchArgument", "dsp.signedChainedSearchArgument",
2135         FT_NONE, BASE_NONE, NULL, 0,
2136         "dsp.T_signedChainedSearchArgument", HFILL }},
2137     { &hf_dsp_chainedSearchArgument,
2138       { "chainedSearchArgument", "dsp.chainedSearchArgument",
2139         FT_NONE, BASE_NONE, NULL, 0,
2140         "dsp.ChainedSearchArgumentData", HFILL }},
2141     { &hf_dsp_searchResult,
2142       { "searchResult", "dsp.searchResult",
2143         FT_UINT32, BASE_DEC, VALS(dap_SearchResult_vals), 0,
2144         "dap.SearchResult", HFILL }},
2145     { &hf_dsp_unsignedChainedSearchResult,
2146       { "unsignedChainedSearchResult", "dsp.unsignedChainedSearchResult",
2147         FT_NONE, BASE_NONE, NULL, 0,
2148         "dsp.ChainedSearchResultData", HFILL }},
2149     { &hf_dsp_signedChainedSearchResult,
2150       { "signedChainedSearchResult", "dsp.signedChainedSearchResult",
2151         FT_NONE, BASE_NONE, NULL, 0,
2152         "dsp.T_signedChainedSearchResult", HFILL }},
2153     { &hf_dsp_chainedSearchResult,
2154       { "chainedSearchResult", "dsp.chainedSearchResult",
2155         FT_NONE, BASE_NONE, NULL, 0,
2156         "dsp.ChainedSearchResultData", HFILL }},
2157     { &hf_dsp_addEntryArgument,
2158       { "addEntryArgument", "dsp.addEntryArgument",
2159         FT_UINT32, BASE_DEC, VALS(dap_AddEntryArgument_vals), 0,
2160         "dap.AddEntryArgument", HFILL }},
2161     { &hf_dsp_unsignedChainedAddEntryArgument,
2162       { "unsignedChainedAddEntryArgument", "dsp.unsignedChainedAddEntryArgument",
2163         FT_NONE, BASE_NONE, NULL, 0,
2164         "dsp.ChainedAddEntryArgumentData", HFILL }},
2165     { &hf_dsp_signedChainedAddEntryArgument,
2166       { "signedChainedAddEntryArgument", "dsp.signedChainedAddEntryArgument",
2167         FT_NONE, BASE_NONE, NULL, 0,
2168         "dsp.T_signedChainedAddEntryArgument", HFILL }},
2169     { &hf_dsp_chainedAddEntryArgument,
2170       { "chainedAddEntryArgument", "dsp.chainedAddEntryArgument",
2171         FT_NONE, BASE_NONE, NULL, 0,
2172         "dsp.ChainedAddEntryArgumentData", HFILL }},
2173     { &hf_dsp_addEntryResult,
2174       { "addEntryResult", "dsp.addEntryResult",
2175         FT_UINT32, BASE_DEC, VALS(dap_AddEntryResult_vals), 0,
2176         "dap.AddEntryResult", HFILL }},
2177     { &hf_dsp_unsignedChainedAddEntryResult,
2178       { "unsignedChainedAddEntryResult", "dsp.unsignedChainedAddEntryResult",
2179         FT_NONE, BASE_NONE, NULL, 0,
2180         "dsp.ChainedAddEntryResultData", HFILL }},
2181     { &hf_dsp_signedChainedAddEntryResult,
2182       { "signedChainedAddEntryResult", "dsp.signedChainedAddEntryResult",
2183         FT_NONE, BASE_NONE, NULL, 0,
2184         "dsp.T_signedChainedAddEntryResult", HFILL }},
2185     { &hf_dsp_chainedAddEntryResult,
2186       { "chainedAddEntryResult", "dsp.chainedAddEntryResult",
2187         FT_NONE, BASE_NONE, NULL, 0,
2188         "dsp.ChainedAddEntryResultData", HFILL }},
2189     { &hf_dsp_removeEntryArgument,
2190       { "removeEntryArgument", "dsp.removeEntryArgument",
2191         FT_UINT32, BASE_DEC, VALS(dap_RemoveEntryArgument_vals), 0,
2192         "dap.RemoveEntryArgument", HFILL }},
2193     { &hf_dsp_unsignedChainedRemoveEntryArgument,
2194       { "unsignedChainedRemoveEntryArgument", "dsp.unsignedChainedRemoveEntryArgument",
2195         FT_NONE, BASE_NONE, NULL, 0,
2196         "dsp.ChainedRemoveEntryArgumentData", HFILL }},
2197     { &hf_dsp_signedChainedRemoveEntryArgument,
2198       { "signedChainedRemoveEntryArgument", "dsp.signedChainedRemoveEntryArgument",
2199         FT_NONE, BASE_NONE, NULL, 0,
2200         "dsp.T_signedChainedRemoveEntryArgument", HFILL }},
2201     { &hf_dsp_chainedRemoveEntryArgument,
2202       { "chainedRemoveEntryArgument", "dsp.chainedRemoveEntryArgument",
2203         FT_NONE, BASE_NONE, NULL, 0,
2204         "dsp.ChainedRemoveEntryArgumentData", HFILL }},
2205     { &hf_dsp_removeEntryResult,
2206       { "removeEntryResult", "dsp.removeEntryResult",
2207         FT_UINT32, BASE_DEC, VALS(dap_RemoveEntryResult_vals), 0,
2208         "dap.RemoveEntryResult", HFILL }},
2209     { &hf_dsp_unsignedChainedRemoveEntryResult,
2210       { "unsignedChainedRemoveEntryResult", "dsp.unsignedChainedRemoveEntryResult",
2211         FT_NONE, BASE_NONE, NULL, 0,
2212         "dsp.ChainedRemoveEntryResultData", HFILL }},
2213     { &hf_dsp_signedChainedRemoveEntryResult,
2214       { "signedChainedRemoveEntryResult", "dsp.signedChainedRemoveEntryResult",
2215         FT_NONE, BASE_NONE, NULL, 0,
2216         "dsp.T_signedChainedRemoveEntryResult", HFILL }},
2217     { &hf_dsp_chainedRemoveEntryResult,
2218       { "chainedRemoveEntryResult", "dsp.chainedRemoveEntryResult",
2219         FT_NONE, BASE_NONE, NULL, 0,
2220         "dsp.ChainedRemoveEntryResultData", HFILL }},
2221     { &hf_dsp_modifyEntryArgument,
2222       { "modifyEntryArgument", "dsp.modifyEntryArgument",
2223         FT_UINT32, BASE_DEC, VALS(dap_ModifyEntryArgument_vals), 0,
2224         "dap.ModifyEntryArgument", HFILL }},
2225     { &hf_dsp_unsignedChainedModifyEntryArgument,
2226       { "unsignedChainedModifyEntryArgument", "dsp.unsignedChainedModifyEntryArgument",
2227         FT_NONE, BASE_NONE, NULL, 0,
2228         "dsp.ChainedModifyEntryArgumentData", HFILL }},
2229     { &hf_dsp_signedChainedModifyEntryArgument,
2230       { "signedChainedModifyEntryArgument", "dsp.signedChainedModifyEntryArgument",
2231         FT_NONE, BASE_NONE, NULL, 0,
2232         "dsp.T_signedChainedModifyEntryArgument", HFILL }},
2233     { &hf_dsp_chainedModifyEntryArgument,
2234       { "chainedModifyEntryArgument", "dsp.chainedModifyEntryArgument",
2235         FT_NONE, BASE_NONE, NULL, 0,
2236         "dsp.ChainedModifyEntryArgumentData", HFILL }},
2237     { &hf_dsp_modifyEntryResult,
2238       { "modifyEntryResult", "dsp.modifyEntryResult",
2239         FT_UINT32, BASE_DEC, VALS(dap_ModifyEntryResult_vals), 0,
2240         "dap.ModifyEntryResult", HFILL }},
2241     { &hf_dsp_unsignedChainedModifyEntryResult,
2242       { "unsignedChainedModifyEntryResult", "dsp.unsignedChainedModifyEntryResult",
2243         FT_NONE, BASE_NONE, NULL, 0,
2244         "dsp.ChainedModifyEntryResultData", HFILL }},
2245     { &hf_dsp_signedChainedModifyEntryResult,
2246       { "signedChainedModifyEntryResult", "dsp.signedChainedModifyEntryResult",
2247         FT_NONE, BASE_NONE, NULL, 0,
2248         "dsp.T_signedChainedModifyEntryResult", HFILL }},
2249     { &hf_dsp_chainedModifyEntryResult,
2250       { "chainedModifyEntryResult", "dsp.chainedModifyEntryResult",
2251         FT_NONE, BASE_NONE, NULL, 0,
2252         "dsp.ChainedModifyEntryResultData", HFILL }},
2253     { &hf_dsp_modifyDNArgument,
2254       { "modifyDNArgument", "dsp.modifyDNArgument",
2255         FT_NONE, BASE_NONE, NULL, 0,
2256         "dap.ModifyDNArgument", HFILL }},
2257     { &hf_dsp_unsignedChainedModifyDNArgument,
2258       { "unsignedChainedModifyDNArgument", "dsp.unsignedChainedModifyDNArgument",
2259         FT_NONE, BASE_NONE, NULL, 0,
2260         "dsp.ChainedModifyDNArgumentData", HFILL }},
2261     { &hf_dsp_signedChainedModifyDNArgument,
2262       { "signedChainedModifyDNArgument", "dsp.signedChainedModifyDNArgument",
2263         FT_NONE, BASE_NONE, NULL, 0,
2264         "dsp.T_signedChainedModifyDNArgument", HFILL }},
2265     { &hf_dsp_chainedModifyDNArgument,
2266       { "chainedModifyDNArgument", "dsp.chainedModifyDNArgument",
2267         FT_NONE, BASE_NONE, NULL, 0,
2268         "dsp.ChainedModifyDNArgumentData", HFILL }},
2269     { &hf_dsp_modifyDNResult,
2270       { "modifyDNResult", "dsp.modifyDNResult",
2271         FT_UINT32, BASE_DEC, VALS(dap_ModifyDNResult_vals), 0,
2272         "dap.ModifyDNResult", HFILL }},
2273     { &hf_dsp_unsignedChainedModifyDNResult,
2274       { "unsignedChainedModifyDNResult", "dsp.unsignedChainedModifyDNResult",
2275         FT_NONE, BASE_NONE, NULL, 0,
2276         "dsp.ChainedModifyDNResultData", HFILL }},
2277     { &hf_dsp_signedChainedModifyDNResult,
2278       { "signedChainedModifyDNResult", "dsp.signedChainedModifyDNResult",
2279         FT_NONE, BASE_NONE, NULL, 0,
2280         "dsp.T_signedChainedModifyDNResult", HFILL }},
2281     { &hf_dsp_chainedModifyDNResult,
2282       { "chainedModifyDNResult", "dsp.chainedModifyDNResult",
2283         FT_NONE, BASE_NONE, NULL, 0,
2284         "dsp.ChainedModifyDNResultData", HFILL }},
2285     { &hf_dsp_reference,
2286       { "reference", "dsp.reference",
2287         FT_NONE, BASE_NONE, NULL, 0,
2288         "dsp.ContinuationReference", HFILL }},
2289     { &hf_dsp_contextPrefix,
2290       { "contextPrefix", "dsp.contextPrefix",
2291         FT_UINT32, BASE_DEC, NULL, 0,
2292         "x509if.DistinguishedName", HFILL }},
2293     { &hf_dsp_securityParameters,
2294       { "securityParameters", "dsp.securityParameters",
2295         FT_NONE, BASE_NONE, NULL, 0,
2296         "dap.SecurityParameters", HFILL }},
2297     { &hf_dsp_performer,
2298       { "performer", "dsp.performer",
2299         FT_UINT32, BASE_DEC, NULL, 0,
2300         "x509if.DistinguishedName", HFILL }},
2301     { &hf_dsp_aliasDereferenced,
2302       { "aliasDereferenced", "dsp.aliasDereferenced",
2303         FT_BOOLEAN, BASE_NONE, NULL, 0,
2304         "dsp.BOOLEAN", HFILL }},
2305     { &hf_dsp_notification,
2306       { "notification", "dsp.notification",
2307         FT_UINT32, BASE_DEC, NULL, 0,
2308         "dsp.SEQUENCE_OF_Attribute", HFILL }},
2309     { &hf_dsp_notification_item,
2310       { "Attribute", "dsp.Attribute",
2311         FT_NONE, BASE_NONE, NULL, 0,
2312         "x509if.Attribute", HFILL }},
2313     { &hf_dsp_unsignedDSAReferral,
2314       { "unsignedDSAReferral", "dsp.unsignedDSAReferral",
2315         FT_NONE, BASE_NONE, NULL, 0,
2316         "dsp.DSAReferralData", HFILL }},
2317     { &hf_dsp_signedDSAReferral,
2318       { "signedDSAReferral", "dsp.signedDSAReferral",
2319         FT_NONE, BASE_NONE, NULL, 0,
2320         "dsp.T_signedDSAReferral", HFILL }},
2321     { &hf_dsp_dsaReferral,
2322       { "dsaReferral", "dsp.dsaReferral",
2323         FT_NONE, BASE_NONE, NULL, 0,
2324         "dsp.DSAReferralData", HFILL }},
2325     { &hf_dsp_originator,
2326       { "originator", "dsp.originator",
2327         FT_UINT32, BASE_DEC, NULL, 0,
2328         "x509if.DistinguishedName", HFILL }},
2329     { &hf_dsp_targetObjectDN,
2330       { "targetObject", "dsp.targetObject",
2331         FT_UINT32, BASE_DEC, NULL, 0,
2332         "x509if.DistinguishedName", HFILL }},
2333     { &hf_dsp_operationProgress,
2334       { "operationProgress", "dsp.operationProgress",
2335         FT_NONE, BASE_NONE, NULL, 0,
2336         "dsp.OperationProgress", HFILL }},
2337     { &hf_dsp_traceInformation,
2338       { "traceInformation", "dsp.traceInformation",
2339         FT_UINT32, BASE_DEC, NULL, 0,
2340         "dsp.TraceInformation", HFILL }},
2341     { &hf_dsp_aliasedRDNs,
2342       { "aliasedRDNs", "dsp.aliasedRDNs",
2343         FT_INT32, BASE_DEC, NULL, 0,
2344         "dsp.INTEGER", HFILL }},
2345     { &hf_dsp_returnCrossRefs,
2346       { "returnCrossRefs", "dsp.returnCrossRefs",
2347         FT_BOOLEAN, BASE_NONE, NULL, 0,
2348         "dsp.BOOLEAN", HFILL }},
2349     { &hf_dsp_referenceType,
2350       { "referenceType", "dsp.referenceType",
2351         FT_UINT32, BASE_DEC, VALS(dsp_ReferenceType_vals), 0,
2352         "dsp.ReferenceType", HFILL }},
2353     { &hf_dsp_info,
2354       { "info", "dsp.info",
2355         FT_OID, BASE_NONE, NULL, 0,
2356         "dsp.DomainInfo", HFILL }},
2357     { &hf_dsp_timeLimit,
2358       { "timeLimit", "dsp.timeLimit",
2359         FT_UINT32, BASE_DEC, VALS(dsp_Time_vals), 0,
2360         "dsp.Time", HFILL }},
2361     { &hf_dsp_entryOnly,
2362       { "entryOnly", "dsp.entryOnly",
2363         FT_BOOLEAN, BASE_NONE, NULL, 0,
2364         "dsp.BOOLEAN", HFILL }},
2365     { &hf_dsp_uniqueIdentifier,
2366       { "uniqueIdentifier", "dsp.uniqueIdentifier",
2367         FT_BYTES, BASE_NONE, NULL, 0,
2368         "x509sat.UniqueIdentifier", HFILL }},
2369     { &hf_dsp_authenticationLevel,
2370       { "authenticationLevel", "dsp.authenticationLevel",
2371         FT_UINT32, BASE_DEC, VALS(dsp_AuthenticationLevel_vals), 0,
2372         "dsp.AuthenticationLevel", HFILL }},
2373     { &hf_dsp_exclusions,
2374       { "exclusions", "dsp.exclusions",
2375         FT_UINT32, BASE_DEC, NULL, 0,
2376         "dsp.Exclusions", HFILL }},
2377     { &hf_dsp_excludeShadows,
2378       { "excludeShadows", "dsp.excludeShadows",
2379         FT_BOOLEAN, BASE_NONE, NULL, 0,
2380         "dsp.BOOLEAN", HFILL }},
2381     { &hf_dsp_nameResolveOnMaster,
2382       { "nameResolveOnMaster", "dsp.nameResolveOnMaster",
2383         FT_BOOLEAN, BASE_NONE, NULL, 0,
2384         "dsp.BOOLEAN", HFILL }},
2385     { &hf_dsp_operationIdentifier,
2386       { "operationIdentifier", "dsp.operationIdentifier",
2387         FT_INT32, BASE_DEC, NULL, 0,
2388         "dsp.INTEGER", HFILL }},
2389     { &hf_dsp_searchRuleId,
2390       { "searchRuleId", "dsp.searchRuleId",
2391         FT_NONE, BASE_NONE, NULL, 0,
2392         "x509if.SearchRuleId", HFILL }},
2393     { &hf_dsp_chainedRelaxation,
2394       { "chainedRelaxation", "dsp.chainedRelaxation",
2395         FT_NONE, BASE_NONE, NULL, 0,
2396         "x509if.MRMapping", HFILL }},
2397     { &hf_dsp_relatedEntry,
2398       { "relatedEntry", "dsp.relatedEntry",
2399         FT_INT32, BASE_DEC, NULL, 0,
2400         "dsp.INTEGER", HFILL }},
2401     { &hf_dsp_dspPaging,
2402       { "dspPaging", "dsp.dspPaging",
2403         FT_BOOLEAN, BASE_NONE, NULL, 0,
2404         "dsp.BOOLEAN", HFILL }},
2405     { &hf_dsp_nonDapPdu,
2406       { "nonDapPdu", "dsp.nonDapPdu",
2407         FT_UINT32, BASE_DEC, VALS(dsp_T_nonDapPdu_vals), 0,
2408         "dsp.T_nonDapPdu", HFILL }},
2409     { &hf_dsp_streamedResults,
2410       { "streamedResults", "dsp.streamedResults",
2411         FT_INT32, BASE_DEC, NULL, 0,
2412         "dsp.INTEGER", HFILL }},
2413     { &hf_dsp_excludeWriteableCopies,
2414       { "excludeWriteableCopies", "dsp.excludeWriteableCopies",
2415         FT_BOOLEAN, BASE_NONE, NULL, 0,
2416         "dsp.BOOLEAN", HFILL }},
2417     { &hf_dsp_utcTime,
2418       { "utcTime", "dsp.utcTime",
2419         FT_STRING, BASE_NONE, NULL, 0,
2420         "dsp.UTCTime", HFILL }},
2421     { &hf_dsp_generalizedTime,
2422       { "generalizedTime", "dsp.generalizedTime",
2423         FT_STRING, BASE_NONE, NULL, 0,
2424         "dsp.GeneralizedTime", HFILL }},
2425     { &hf_dsp_crossReferences,
2426       { "crossReferences", "dsp.crossReferences",
2427         FT_UINT32, BASE_DEC, NULL, 0,
2428         "dsp.SEQUENCE_OF_CrossReference", HFILL }},
2429     { &hf_dsp_crossReferences_item,
2430       { "CrossReference", "dsp.CrossReference",
2431         FT_NONE, BASE_NONE, NULL, 0,
2432         "dsp.CrossReference", HFILL }},
2433     { &hf_dsp_alreadySearched,
2434       { "alreadySearched", "dsp.alreadySearched",
2435         FT_UINT32, BASE_DEC, NULL, 0,
2436         "dsp.Exclusions", HFILL }},
2437     { &hf_dsp_accessPoint,
2438       { "accessPoint", "dsp.accessPoint",
2439         FT_NONE, BASE_NONE, NULL, 0,
2440         "dsp.AccessPointInformation", HFILL }},
2441     { &hf_dsp_nameResolutionPhase,
2442       { "nameResolutionPhase", "dsp.nameResolutionPhase",
2443         FT_UINT32, BASE_DEC, VALS(dsp_T_nameResolutionPhase_vals), 0,
2444         "dsp.T_nameResolutionPhase", HFILL }},
2445     { &hf_dsp_nextRDNToBeResolved,
2446       { "nextRDNToBeResolved", "dsp.nextRDNToBeResolved",
2447         FT_INT32, BASE_DEC, NULL, 0,
2448         "dsp.INTEGER", HFILL }},
2449     { &hf_dsp_TraceInformation_item,
2450       { "TraceItem", "dsp.TraceItem",
2451         FT_NONE, BASE_NONE, NULL, 0,
2452         "dsp.TraceItem", HFILL }},
2453     { &hf_dsp_dsa,
2454       { "dsa", "dsp.dsa",
2455         FT_UINT32, BASE_DEC, VALS(x509if_Name_vals), 0,
2456         "x509if.Name", HFILL }},
2457     { &hf_dsp_targetObject,
2458       { "targetObject", "dsp.targetObject",
2459         FT_UINT32, BASE_DEC, VALS(x509if_Name_vals), 0,
2460         "x509if.Name", HFILL }},
2461     { &hf_dsp_ae_title,
2462       { "ae-title", "dsp.ae_title",
2463         FT_UINT32, BASE_DEC, VALS(x509if_Name_vals), 0,
2464         "x509if.Name", HFILL }},
2465     { &hf_dsp_address,
2466       { "address", "dsp.address",
2467         FT_NONE, BASE_NONE, NULL, 0,
2468         "x509sat.PresentationAddress", HFILL }},
2469     { &hf_dsp_protocolInformation,
2470       { "protocolInformation", "dsp.protocolInformation",
2471         FT_UINT32, BASE_DEC, NULL, 0,
2472         "dsp.SET_OF_ProtocolInformation", HFILL }},
2473     { &hf_dsp_protocolInformation_item,
2474       { "ProtocolInformation", "dsp.ProtocolInformation",
2475         FT_NONE, BASE_NONE, NULL, 0,
2476         "x509sat.ProtocolInformation", HFILL }},
2477     { &hf_dsp_labeledURI,
2478       { "labeledURI", "dsp.labeledURI",
2479         FT_UINT32, BASE_DEC, VALS(x509sat_DirectoryString_vals), 0,
2480         "dsp.LabeledURI", HFILL }},
2481     { &hf_dsp_access_point_category,
2482       { "category", "dsp.category",
2483         FT_UINT32, BASE_DEC, VALS(dsp_APCategory_vals), 0,
2484         "dsp.APCategory", HFILL }},
2485     { &hf_dsp_chainingRequired,
2486       { "chainingRequired", "dsp.chainingRequired",
2487         FT_BOOLEAN, BASE_NONE, NULL, 0,
2488         "dsp.BOOLEAN", HFILL }},
2489     { &hf_dsp_MasterAndShadowAccessPoints_item,
2490       { "MasterOrShadowAccessPoint", "dsp.MasterOrShadowAccessPoint",
2491         FT_NONE, BASE_NONE, NULL, 0,
2492         "dsp.MasterOrShadowAccessPoint", HFILL }},
2493     { &hf_dsp_category,
2494       { "category", "dsp.category",
2495         FT_UINT32, BASE_DEC, VALS(dsp_T_category_vals), 0,
2496         "dsp.T_category", HFILL }},
2497     { &hf_dsp_additionalPoints,
2498       { "additionalPoints", "dsp.additionalPoints",
2499         FT_UINT32, BASE_DEC, NULL, 0,
2500         "dsp.MasterAndShadowAccessPoints", HFILL }},
2501     { &hf_dsp_domainLocalID,
2502       { "domainLocalID", "dsp.domainLocalID",
2503         FT_UINT32, BASE_DEC, VALS(x509sat_DirectoryString_vals), 0,
2504         "x509sat.DirectoryString", HFILL }},
2505     { &hf_dsp_accessPoints,
2506       { "accessPoints", "dsp.accessPoints",
2507         FT_UINT32, BASE_DEC, NULL, 0,
2508         "dsp.MasterAndShadowAccessPoints", HFILL }},
2509     { &hf_dsp_Exclusions_item,
2510       { "RDNSequence", "dsp.RDNSequence",
2511         FT_UINT32, BASE_DEC, NULL, 0,
2512         "x509if.RDNSequence", HFILL }},
2513     { &hf_dsp_rdnsResolved,
2514       { "rdnsResolved", "dsp.rdnsResolved",
2515         FT_INT32, BASE_DEC, NULL, 0,
2516         "dsp.INTEGER", HFILL }},
2517     { &hf_dsp_accessPoints_01,
2518       { "accessPoints", "dsp.accessPoints",
2519         FT_UINT32, BASE_DEC, NULL, 0,
2520         "dsp.SET_OF_AccessPointInformation", HFILL }},
2521     { &hf_dsp_accessPoints_item,
2522       { "AccessPointInformation", "dsp.AccessPointInformation",
2523         FT_NONE, BASE_NONE, NULL, 0,
2524         "dsp.AccessPointInformation", HFILL }},
2525     { &hf_dsp_returnToDUA,
2526       { "returnToDUA", "dsp.returnToDUA",
2527         FT_BOOLEAN, BASE_NONE, NULL, 0,
2528         "dsp.BOOLEAN", HFILL }},
2529     { &hf_dsp_basicLevels,
2530       { "basicLevels", "dsp.basicLevels",
2531         FT_NONE, BASE_NONE, NULL, 0,
2532         "dsp.T_basicLevels", HFILL }},
2533     { &hf_dsp_level,
2534       { "level", "dsp.level",
2535         FT_UINT32, BASE_DEC, VALS(dsp_T_level_vals), 0,
2536         "dsp.T_level", HFILL }},
2537     { &hf_dsp_localQualifier,
2538       { "localQualifier", "dsp.localQualifier",
2539         FT_INT32, BASE_DEC, NULL, 0,
2540         "dsp.INTEGER", HFILL }},
2541     { &hf_dsp_signed,
2542       { "signed", "dsp.signed",
2543         FT_BOOLEAN, BASE_NONE, NULL, 0,
2544         "dsp.BOOLEAN", HFILL }},
2545     { &hf_dsp_other,
2546       { "other", "dsp.other",
2547         FT_NONE, BASE_NONE, NULL, 0,
2548         "dsp.EXTERNAL", HFILL }},
2549
2550 /*--- End of included file: packet-dsp-hfarr.c ---*/
2551 #line 277 "packet-dsp-template.c"
2552   };
2553
2554   /* List of subtrees */
2555   static gint *ett[] = {
2556     &ett_dsp,
2557
2558 /*--- Included file: packet-dsp-ettarr.c ---*/
2559 #line 1 "packet-dsp-ettarr.c"
2560     &ett_dsp_ChainedReadArgumentData,
2561     &ett_dsp_ChainedReadArgument,
2562     &ett_dsp_T_signedChainedReadArgument,
2563     &ett_dsp_ChainedReadResultData,
2564     &ett_dsp_ChainedReadResult,
2565     &ett_dsp_T_signedChainedReadResult,
2566     &ett_dsp_ChainedCompareArgumentData,
2567     &ett_dsp_ChainedCompareArgument,
2568     &ett_dsp_T_signedChainedCompareArgument,
2569     &ett_dsp_ChainedCompareResultData,
2570     &ett_dsp_ChainedCompareResult,
2571     &ett_dsp_T_signedChainedCompareResult,
2572     &ett_dsp_ChainedListArgumentData,
2573     &ett_dsp_ChainedListArgument,
2574     &ett_dsp_T_signedChainedListArgument,
2575     &ett_dsp_ChainedListResultData,
2576     &ett_dsp_ChainedListResult,
2577     &ett_dsp_T_signedChainedListResult,
2578     &ett_dsp_ChainedSearchArgumentData,
2579     &ett_dsp_ChainedSearchArgument,
2580     &ett_dsp_T_signedChainedSearchArgument,
2581     &ett_dsp_ChainedSearchResultData,
2582     &ett_dsp_ChainedSearchResult,
2583     &ett_dsp_T_signedChainedSearchResult,
2584     &ett_dsp_ChainedAddEntryArgumentData,
2585     &ett_dsp_ChainedAddEntryArgument,
2586     &ett_dsp_T_signedChainedAddEntryArgument,
2587     &ett_dsp_ChainedAddEntryResultData,
2588     &ett_dsp_ChainedAddEntryResult,
2589     &ett_dsp_T_signedChainedAddEntryResult,
2590     &ett_dsp_ChainedRemoveEntryArgumentData,
2591     &ett_dsp_ChainedRemoveEntryArgument,
2592     &ett_dsp_T_signedChainedRemoveEntryArgument,
2593     &ett_dsp_ChainedRemoveEntryResultData,
2594     &ett_dsp_ChainedRemoveEntryResult,
2595     &ett_dsp_T_signedChainedRemoveEntryResult,
2596     &ett_dsp_ChainedModifyEntryArgumentData,
2597     &ett_dsp_ChainedModifyEntryArgument,
2598     &ett_dsp_T_signedChainedModifyEntryArgument,
2599     &ett_dsp_ChainedModifyEntryResultData,
2600     &ett_dsp_ChainedModifyEntryResult,
2601     &ett_dsp_T_signedChainedModifyEntryResult,
2602     &ett_dsp_ChainedModifyDNArgumentData,
2603     &ett_dsp_ChainedModifyDNArgument,
2604     &ett_dsp_T_signedChainedModifyDNArgument,
2605     &ett_dsp_ChainedModifyDNResultData,
2606     &ett_dsp_ChainedModifyDNResult,
2607     &ett_dsp_T_signedChainedModifyDNResult,
2608     &ett_dsp_DSAReferralData,
2609     &ett_dsp_SEQUENCE_OF_Attribute,
2610     &ett_dsp_DSAReferral,
2611     &ett_dsp_T_signedDSAReferral,
2612     &ett_dsp_ChainingArguments,
2613     &ett_dsp_Time,
2614     &ett_dsp_ChainingResults,
2615     &ett_dsp_SEQUENCE_OF_CrossReference,
2616     &ett_dsp_CrossReference,
2617     &ett_dsp_OperationProgress,
2618     &ett_dsp_TraceInformation,
2619     &ett_dsp_TraceItem,
2620     &ett_dsp_AccessPoint,
2621     &ett_dsp_SET_OF_ProtocolInformation,
2622     &ett_dsp_MasterOrShadowAccessPoint,
2623     &ett_dsp_MasterAndShadowAccessPoints,
2624     &ett_dsp_AccessPointInformation,
2625     &ett_dsp_DitBridgeKnowledge,
2626     &ett_dsp_Exclusions,
2627     &ett_dsp_ContinuationReference,
2628     &ett_dsp_SET_OF_AccessPointInformation,
2629     &ett_dsp_AuthenticationLevel,
2630     &ett_dsp_T_basicLevels,
2631
2632 /*--- End of included file: packet-dsp-ettarr.c ---*/
2633 #line 283 "packet-dsp-template.c"
2634   };
2635   module_t *dsp_module;
2636
2637   /* Register protocol */
2638   proto_dsp = proto_register_protocol(PNAME, PSNAME, PFNAME);
2639
2640   register_dissector("dsp", dissect_dsp, proto_dsp);
2641
2642   /* Register fields and subtrees */
2643   proto_register_field_array(proto_dsp, hf, array_length(hf));
2644   proto_register_subtree_array(ett, array_length(ett));
2645
2646   /* Register our configuration options for DSP, particularly our port */
2647
2648   dsp_module = prefs_register_protocol_subtree("OSI/X.500", proto_dsp, prefs_register_dsp);
2649
2650   prefs_register_uint_preference(dsp_module, "tcp.port", "DSP TCP Port",
2651                                  "Set the port for DSP operations (if other"
2652                                  " than the default of 102)",
2653                                  10, &global_dsp_tcp_port);
2654
2655
2656 }
2657
2658
2659 /*--- proto_reg_handoff_dsp --- */
2660 void proto_reg_handoff_dsp(void) {
2661   dissector_handle_t dsp_handle;
2662
2663
2664 /*--- Included file: packet-dsp-dis-tab.c ---*/
2665 #line 1 "packet-dsp-dis-tab.c"
2666   register_ber_oid_dissector("2.5.12.1", dissect_AccessPoint_PDU, proto_dsp, "id-doa-myAccessPoint");
2667   register_ber_oid_dissector("2.5.12.2", dissect_AccessPoint_PDU, proto_dsp, "id-doa-superiorKnowledge");
2668   register_ber_oid_dissector("2.5.12.3", dissect_MasterAndShadowAccessPoints_PDU, proto_dsp, "id-doa-specificKnowledge");
2669   register_ber_oid_dissector("2.5.12.4", dissect_MasterAndShadowAccessPoints_PDU, proto_dsp, "id-doa-nonSpecificKnowledge");
2670   register_ber_oid_dissector("2.5.12.8", dissect_DitBridgeKnowledge_PDU, proto_dsp, "id-doa-ditBridgeKnowledge");
2671
2672
2673 /*--- End of included file: packet-dsp-dis-tab.c ---*/
2674 #line 313 "packet-dsp-template.c"
2675
2676   /* APPLICATION CONTEXT */
2677
2678   oid_add_from_string("id-ac-directory-system","2.5.3.2");
2679
2680   /* ABSTRACT SYNTAXES */
2681     
2682   /* remember the tpkt handler for change in preferences */
2683   tpkt_handle = find_dissector("tpkt");
2684
2685   /* Register DSP with ROS (with no use of RTSE) */
2686   dsp_handle = find_dissector("dsp");
2687   register_ros_oid_dissector_handle("2.5.9.2", dsp_handle, 0, "id-as-directory-system", FALSE); 
2688
2689 }
2690
2691 void prefs_register_dsp(void) {
2692   static guint tcp_port = 0;
2693
2694   /* de-register the old port */
2695   /* port 102 is registered by TPKT - don't undo this! */
2696   if((tcp_port > 0) && (tcp_port != 102) && tpkt_handle)
2697     dissector_delete("tcp.port", tcp_port, tpkt_handle);
2698
2699   /* Set our port number for future use */
2700   tcp_port = global_dsp_tcp_port;
2701
2702   if((tcp_port > 0) && (tcp_port != 102) && tpkt_handle)
2703     dissector_add("tcp.port", global_dsp_tcp_port, tpkt_handle);
2704
2705 }