ec1cbbb5da3edfd581546b58c1655e6ad576782c
[metze/wireshark/wip.git] / epan / dissectors / packet-pres.c
1 /* Do not modify this file. Changes will be overwritten.                      */
2 /* Generated automatically by the ASN.1 to Wireshark dissector compiler       */
3 /* packet-pres.c                                                              */
4 /* ../../tools/asn2wrs.py -b -p pres -c ./pres.cnf -s ./packet-pres-template -D . -O ../../epan/dissectors ISO8823-PRESENTATION.asn ISO9576-PRESENTATION.asn */
5
6 /* Input file: packet-pres-template.c */
7
8 #line 1 "../../asn1/pres/packet-pres-template.c"
9 /* packet-pres.c
10  * Routine to dissect ISO 8823 OSI Presentation Protocol packets
11  * Based on the dissector by
12  * Yuriy Sidelnikov <YSidelnikov@hotmail.com>
13  *
14  * $Id$
15  *
16  * Wireshark - Network traffic analyzer
17  * By Gerald Combs <gerald@wireshark.org>
18  * Copyright 1998 Gerald Combs
19  *
20  * This program is free software; you can redistribute it and/or
21  * modify it under the terms of the GNU General Public License
22  * as published by the Free Software Foundation; either version 2
23  * of the License, or (at your option) any later version.
24  *
25  * This program is distributed in the hope that it will be useful,
26  * but WITHOUT ANY WARRANTY; without even the implied warranty of
27  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
28  * GNU General Public License for more details.
29  *
30  * You should have received a copy of the GNU General Public License
31  * along with this program; if not, write to the Free Software
32  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
33  */
34
35 #include "config.h"
36
37 #include <glib.h>
38 #include <epan/packet.h>
39 #include <epan/prefs.h>
40 #include <epan/conversation.h>
41 #include <epan/emem.h>
42 #include <epan/expert.h>
43 #include <epan/uat.h>
44
45 #include <string.h>
46
47 #include <epan/asn1.h>
48 #include <epan/oids.h>
49 #include "packet-ber.h"
50 #include "packet-ses.h"
51 #include "packet-pres.h"
52 #include "packet-rtse.h"
53
54
55 #define PNAME  "ISO 8823 OSI Presentation Protocol"
56 #define PSNAME "PRES"
57 #define PFNAME "pres"
58
59 #define CLPNAME  "ISO 9576-1 OSI Connectionless Presentation Protocol"
60 #define CLPSNAME "CLPRES"
61 #define CLPFNAME "clpres"
62
63 /* Initialize the protocol and registered fields */
64 static int proto_pres = -1;
65
66 /* Initialize the connectionles protocol */
67 static int proto_clpres = -1;
68
69
70 /*   type of session envelop */
71 static struct SESSION_DATA_STRUCTURE* session = NULL;
72
73 /*      pointers for acse dissector  */
74 proto_tree *global_tree  = NULL;
75 packet_info *global_pinfo = NULL;
76
77 static const char *abstract_syntax_name_oid;
78 static guint32 presentation_context_identifier;
79
80 /* to keep track of presentation context identifiers and protocol-oids */
81 typedef struct _pres_ctx_oid_t {
82         guint32 ctx_id;
83         char *oid;
84         guint32 index;
85 } pres_ctx_oid_t;
86 static GHashTable *pres_ctx_oid_table = NULL;
87
88 typedef struct _pres_user_t {
89    guint ctx_id;
90    char *oid;
91 } pres_user_t;
92
93 static pres_user_t *pres_users;
94 static guint num_pres_users;
95
96 static int hf_pres_CP_type = -1;
97 static int hf_pres_CPA_PPDU = -1;
98 static int hf_pres_Abort_type = -1;
99 static int hf_pres_CPR_PPDU = -1;
100 static int hf_pres_Typed_data_type = -1;
101
102
103 /*--- Included file: packet-pres-hf.c ---*/
104 #line 1 "../../asn1/pres/packet-pres-hf.c"
105 static int hf_pres_UD_type_PDU = -1;              /* UD_type */
106 static int hf_pres_mode_selector = -1;            /* Mode_selector */
107 static int hf_pres_x410_mode_parameters = -1;     /* RTORQapdu */
108 static int hf_pres_normal_mode_parameters = -1;   /* T_normal_mode_parameters */
109 static int hf_pres_protocol_version = -1;         /* Protocol_version */
110 static int hf_pres_calling_presentation_selector = -1;  /* Calling_presentation_selector */
111 static int hf_pres_called_presentation_selector = -1;  /* Called_presentation_selector */
112 static int hf_pres_presentation_context_definition_list = -1;  /* Presentation_context_definition_list */
113 static int hf_pres_default_context_name = -1;     /* Default_context_name */
114 static int hf_pres_presentation_requirements = -1;  /* Presentation_requirements */
115 static int hf_pres_user_session_requirements = -1;  /* User_session_requirements */
116 static int hf_pres_protocol_options = -1;         /* Protocol_options */
117 static int hf_pres_initiators_nominated_context = -1;  /* Presentation_context_identifier */
118 static int hf_pres_extensions = -1;               /* T_extensions */
119 static int hf_pres_user_data = -1;                /* User_data */
120 static int hf_pres_cPR_PPDU_x400_mode_parameters = -1;  /* RTOACapdu */
121 static int hf_pres_cPU_PPDU_normal_mode_parameters = -1;  /* T_CPA_PPDU_normal_mode_parameters */
122 static int hf_pres_responding_presentation_selector = -1;  /* Responding_presentation_selector */
123 static int hf_pres_presentation_context_definition_result_list = -1;  /* Presentation_context_definition_result_list */
124 static int hf_pres_responders_nominated_context = -1;  /* Presentation_context_identifier */
125 static int hf_pres_cPU_PPDU_x400_mode_parameters = -1;  /* RTORJapdu */
126 static int hf_pres_cPR_PPDU_normal_mode_parameters = -1;  /* T_CPR_PPDU_normal_mode_parameters */
127 static int hf_pres_default_context_result = -1;   /* Default_context_result */
128 static int hf_pres_cPR_PPDU__provider_reason = -1;  /* Provider_reason */
129 static int hf_pres_aru_ppdu = -1;                 /* ARU_PPDU */
130 static int hf_pres_arp_ppdu = -1;                 /* ARP_PPDU */
131 static int hf_pres_aRU_PPDU_x400_mode_parameters = -1;  /* RTABapdu */
132 static int hf_pres_aRU_PPDU_normal_mode_parameters = -1;  /* T_ARU_PPDU_normal_mode_parameters */
133 static int hf_pres_presentation_context_identifier_list = -1;  /* Presentation_context_identifier_list */
134 static int hf_pres_aRU_PPDU_provider_reason = -1;  /* Abort_reason */
135 static int hf_pres_event_identifier = -1;         /* Event_identifier */
136 static int hf_pres_acPPDU = -1;                   /* AC_PPDU */
137 static int hf_pres_acaPPDU = -1;                  /* ACA_PPDU */
138 static int hf_pres_ttdPPDU = -1;                  /* User_data */
139 static int hf_pres_presentation_context_addition_list = -1;  /* Presentation_context_addition_list */
140 static int hf_pres_presentation_context_deletion_list = -1;  /* Presentation_context_deletion_list */
141 static int hf_pres_presentation_context_addition_result_list = -1;  /* Presentation_context_addition_result_list */
142 static int hf_pres_presentation_context_deletion_result_list = -1;  /* Presentation_context_deletion_result_list */
143 static int hf_pres_Context_list_item = -1;        /* Context_list_item */
144 static int hf_pres_presentation_context_identifier = -1;  /* Presentation_context_identifier */
145 static int hf_pres_abstract_syntax_name = -1;     /* Abstract_syntax_name */
146 static int hf_pres_transfer_syntax_name_list = -1;  /* SEQUENCE_OF_Transfer_syntax_name */
147 static int hf_pres_transfer_syntax_name_list_item = -1;  /* Transfer_syntax_name */
148 static int hf_pres_transfer_syntax_name = -1;     /* Transfer_syntax_name */
149 static int hf_pres_mode_value = -1;               /* T_mode_value */
150 static int hf_pres_Presentation_context_deletion_list_item = -1;  /* Presentation_context_identifier */
151 static int hf_pres_Presentation_context_deletion_result_list_item = -1;  /* Presentation_context_deletion_result_list_item */
152 static int hf_pres_Presentation_context_identifier_list_item = -1;  /* Presentation_context_identifier_list_item */
153 static int hf_pres_Result_list_item = -1;         /* Result_list_item */
154 static int hf_pres_result = -1;                   /* Result */
155 static int hf_pres_provider_reason = -1;          /* T_provider_reason */
156 static int hf_pres_simply_encoded_data = -1;      /* Simply_encoded_data */
157 static int hf_pres_fully_encoded_data = -1;       /* Fully_encoded_data */
158 static int hf_pres_Fully_encoded_data_item = -1;  /* PDV_list */
159 static int hf_pres_presentation_data_values = -1;  /* T_presentation_data_values */
160 static int hf_pres_single_ASN1_type = -1;         /* T_single_ASN1_type */
161 static int hf_pres_octet_aligned = -1;            /* T_octet_aligned */
162 static int hf_pres_arbitrary = -1;                /* BIT_STRING */
163 /* named bits */
164 static int hf_pres_Presentation_requirements_context_management = -1;
165 static int hf_pres_Presentation_requirements_restoration = -1;
166 static int hf_pres_Protocol_options_nominated_context = -1;
167 static int hf_pres_Protocol_options_short_encoding = -1;
168 static int hf_pres_Protocol_options_packed_encoding_rules = -1;
169 static int hf_pres_Protocol_version_version_1 = -1;
170 static int hf_pres_User_session_requirements_half_duplex = -1;
171 static int hf_pres_User_session_requirements_duplex = -1;
172 static int hf_pres_User_session_requirements_expedited_data = -1;
173 static int hf_pres_User_session_requirements_minor_synchronize = -1;
174 static int hf_pres_User_session_requirements_major_synchronize = -1;
175 static int hf_pres_User_session_requirements_resynchronize = -1;
176 static int hf_pres_User_session_requirements_activity_management = -1;
177 static int hf_pres_User_session_requirements_negotiated_release = -1;
178 static int hf_pres_User_session_requirements_capability_data = -1;
179 static int hf_pres_User_session_requirements_exceptions = -1;
180 static int hf_pres_User_session_requirements_typed_data = -1;
181 static int hf_pres_User_session_requirements_symmetric_synchronize = -1;
182 static int hf_pres_User_session_requirements_data_separation = -1;
183
184 /*--- End of included file: packet-pres-hf.c ---*/
185 #line 95 "../../asn1/pres/packet-pres-template.c"
186
187 /* Initialize the subtree pointers */
188 static gint ett_pres           = -1;
189
190
191 /*--- Included file: packet-pres-ett.c ---*/
192 #line 1 "../../asn1/pres/packet-pres-ett.c"
193 static gint ett_pres_CP_type = -1;
194 static gint ett_pres_T_normal_mode_parameters = -1;
195 static gint ett_pres_T_extensions = -1;
196 static gint ett_pres_CPA_PPDU = -1;
197 static gint ett_pres_T_CPA_PPDU_normal_mode_parameters = -1;
198 static gint ett_pres_CPR_PPDU = -1;
199 static gint ett_pres_T_CPR_PPDU_normal_mode_parameters = -1;
200 static gint ett_pres_Abort_type = -1;
201 static gint ett_pres_ARU_PPDU = -1;
202 static gint ett_pres_T_ARU_PPDU_normal_mode_parameters = -1;
203 static gint ett_pres_ARP_PPDU = -1;
204 static gint ett_pres_Typed_data_type = -1;
205 static gint ett_pres_AC_PPDU = -1;
206 static gint ett_pres_ACA_PPDU = -1;
207 static gint ett_pres_RS_PPDU = -1;
208 static gint ett_pres_RSA_PPDU = -1;
209 static gint ett_pres_Context_list = -1;
210 static gint ett_pres_Context_list_item = -1;
211 static gint ett_pres_SEQUENCE_OF_Transfer_syntax_name = -1;
212 static gint ett_pres_Default_context_name = -1;
213 static gint ett_pres_Mode_selector = -1;
214 static gint ett_pres_Presentation_context_deletion_list = -1;
215 static gint ett_pres_Presentation_context_deletion_result_list = -1;
216 static gint ett_pres_Presentation_context_identifier_list = -1;
217 static gint ett_pres_Presentation_context_identifier_list_item = -1;
218 static gint ett_pres_Presentation_requirements = -1;
219 static gint ett_pres_Protocol_options = -1;
220 static gint ett_pres_Protocol_version = -1;
221 static gint ett_pres_Result_list = -1;
222 static gint ett_pres_Result_list_item = -1;
223 static gint ett_pres_User_data = -1;
224 static gint ett_pres_Fully_encoded_data = -1;
225 static gint ett_pres_PDV_list = -1;
226 static gint ett_pres_T_presentation_data_values = -1;
227 static gint ett_pres_User_session_requirements = -1;
228 static gint ett_pres_UD_type = -1;
229
230 /*--- End of included file: packet-pres-ett.c ---*/
231 #line 100 "../../asn1/pres/packet-pres-template.c"
232
233 UAT_DEC_CB_DEF(pres_users, ctx_id, pres_user_t)
234 UAT_CSTRING_CB_DEF(pres_users, oid, pres_user_t)
235
236 static guint
237 pres_ctx_oid_hash(gconstpointer k)
238 {
239         pres_ctx_oid_t *pco=(pres_ctx_oid_t *)k;
240         return pco->ctx_id;
241 }
242
243 static gint
244 pres_ctx_oid_equal(gconstpointer k1, gconstpointer k2)
245 {
246         pres_ctx_oid_t *pco1=(pres_ctx_oid_t *)k1;
247         pres_ctx_oid_t *pco2=(pres_ctx_oid_t *)k2;
248         return (pco1->ctx_id==pco2->ctx_id && pco1->index==pco2->index);
249 }
250
251 static void
252 pres_init(void)
253 {
254         if( pres_ctx_oid_table ){
255                 g_hash_table_destroy(pres_ctx_oid_table);
256                 pres_ctx_oid_table = NULL;
257         }
258         pres_ctx_oid_table = g_hash_table_new(pres_ctx_oid_hash,
259                         pres_ctx_oid_equal);
260
261 }
262
263 static void
264 register_ctx_id_and_oid(packet_info *pinfo _U_, guint32 idx, const char *oid)
265 {
266         pres_ctx_oid_t *pco, *tmppco;
267         conversation_t *conversation;
268
269         if(!oid){
270                 /* we did not get any oid name, malformed packet? */
271                 return;
272         }
273
274         pco=se_new(pres_ctx_oid_t);
275         pco->ctx_id=idx;
276         pco->oid=se_strdup(oid);
277         conversation=find_conversation (pinfo->fd->num, &pinfo->src, &pinfo->dst,
278                         pinfo->ptype, pinfo->srcport, pinfo->destport, 0);
279         if (conversation) {
280                 pco->index = conversation->index;
281         } else {
282                 pco->index = 0;
283         }
284
285         /* if this ctx already exists, remove the old one first */
286         tmppco=(pres_ctx_oid_t *)g_hash_table_lookup(pres_ctx_oid_table, pco);
287         if(tmppco){
288                 g_hash_table_remove(pres_ctx_oid_table, tmppco);
289
290         }
291         g_hash_table_insert(pres_ctx_oid_table, pco, pco);
292 }
293
294 static char *
295 find_oid_in_users_table(packet_info *pinfo, guint32 ctx_id)
296 {
297         guint i;
298
299         for (i = 0; i < num_pres_users; i++) {
300                 pres_user_t *u = &(pres_users[i]);
301
302                 if (u->ctx_id == ctx_id) {
303                         /* Register oid so other dissectors can find this connection */
304                         register_ctx_id_and_oid(pinfo, u->ctx_id, u->oid);
305                         return u->oid;
306                 }
307         }
308
309         return NULL;
310 }
311
312 char *
313 find_oid_by_pres_ctx_id(packet_info *pinfo, guint32 idx)
314 {
315         pres_ctx_oid_t pco, *tmppco;
316         conversation_t *conversation;
317
318         pco.ctx_id=idx;
319         conversation=find_conversation (pinfo->fd->num, &pinfo->src, &pinfo->dst,
320                         pinfo->ptype, pinfo->srcport, pinfo->destport, 0);
321         if (conversation) {
322                 pco.index = conversation->index;
323         } else {
324                 pco.index = 0;
325         }
326
327         tmppco=(pres_ctx_oid_t *)g_hash_table_lookup(pres_ctx_oid_table, &pco);
328         if(tmppco){
329                 return tmppco->oid;
330         }
331
332         return find_oid_in_users_table(pinfo, idx);
333 }
334
335 static void *
336 pres_copy_cb(void *dest, const void *orig, size_t len _U_)
337 {
338         pres_user_t *u = (pres_user_t *)dest;
339         const pres_user_t *o = (const pres_user_t *)orig;
340
341         u->ctx_id = o->ctx_id;
342         u->oid = g_strdup(o->oid);
343
344         return dest;
345 }
346
347 static void
348 pres_free_cb(void *r)
349 {
350         pres_user_t *u = (pres_user_t *)r;
351
352         g_free(u->oid);
353 }
354
355
356
357 /*--- Included file: packet-pres-fn.c ---*/
358 #line 1 "../../asn1/pres/packet-pres-fn.c"
359
360 static const value_string pres_T_mode_value_vals[] = {
361   {   0, "x410-1984-mode" },
362   {   1, "normal-mode" },
363   { 0, NULL }
364 };
365
366
367 static int
368 dissect_pres_T_mode_value(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
369   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
370                                                 NULL);
371
372   return offset;
373 }
374
375
376 static const ber_sequence_t Mode_selector_set[] = {
377   { &hf_pres_mode_value     , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_pres_T_mode_value },
378   { NULL, 0, 0, 0, NULL }
379 };
380
381 static int
382 dissect_pres_Mode_selector(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
383   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
384                               Mode_selector_set, hf_index, ett_pres_Mode_selector);
385
386   return offset;
387 }
388
389
390 static const asn_namedbit Protocol_version_bits[] = {
391   {  0, &hf_pres_Protocol_version_version_1, -1, -1, "version-1", NULL },
392   { 0, NULL, 0, 0, NULL, NULL }
393 };
394
395 static int
396 dissect_pres_Protocol_version(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
397   offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
398                                     Protocol_version_bits, hf_index, ett_pres_Protocol_version,
399                                     NULL);
400
401   return offset;
402 }
403
404
405
406 static int
407 dissect_pres_Presentation_selector(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
408   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
409                                        NULL);
410
411   return offset;
412 }
413
414
415
416 static int
417 dissect_pres_Calling_presentation_selector(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
418   offset = dissect_pres_Presentation_selector(implicit_tag, tvb, offset, actx, tree, hf_index);
419
420   return offset;
421 }
422
423
424
425 static int
426 dissect_pres_Called_presentation_selector(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
427   offset = dissect_pres_Presentation_selector(implicit_tag, tvb, offset, actx, tree, hf_index);
428
429   return offset;
430 }
431
432
433
434 static int
435 dissect_pres_Presentation_context_identifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
436 #line 73 "../../asn1/pres/pres.cnf"
437   const char *name;
438   char *oid;
439
440     offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
441                                                 &presentation_context_identifier);
442
443
444   if(session)
445         session->pres_ctx_id = presentation_context_identifier;
446
447   oid = find_oid_by_pres_ctx_id(actx->pinfo, presentation_context_identifier);
448
449   if(oid && (name = oid_resolved_from_string(oid))) {
450         proto_item_append_text(actx->created_item, " (%s)", name);
451   }
452
453
454
455   return offset;
456 }
457
458
459
460 static int
461 dissect_pres_Abstract_syntax_name(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
462   offset = dissect_ber_object_identifier_str(implicit_tag, actx, tree, tvb, offset, hf_index, &abstract_syntax_name_oid);
463
464   return offset;
465 }
466
467
468
469 static int
470 dissect_pres_Transfer_syntax_name(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
471   offset = dissect_ber_object_identifier(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
472
473   return offset;
474 }
475
476
477 static const ber_sequence_t SEQUENCE_OF_Transfer_syntax_name_sequence_of[1] = {
478   { &hf_pres_transfer_syntax_name_list_item, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_pres_Transfer_syntax_name },
479 };
480
481 static int
482 dissect_pres_SEQUENCE_OF_Transfer_syntax_name(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
483   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
484                                       SEQUENCE_OF_Transfer_syntax_name_sequence_of, hf_index, ett_pres_SEQUENCE_OF_Transfer_syntax_name);
485
486   return offset;
487 }
488
489
490 static const ber_sequence_t Context_list_item_sequence[] = {
491   { &hf_pres_presentation_context_identifier, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_pres_Presentation_context_identifier },
492   { &hf_pres_abstract_syntax_name, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_pres_Abstract_syntax_name },
493   { &hf_pres_transfer_syntax_name_list, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_pres_SEQUENCE_OF_Transfer_syntax_name },
494   { NULL, 0, 0, 0, NULL }
495 };
496
497 static int
498 dissect_pres_Context_list_item(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
499 #line 98 "../../asn1/pres/pres.cnf"
500         abstract_syntax_name_oid=NULL;
501
502   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
503                                    Context_list_item_sequence, hf_index, ett_pres_Context_list_item);
504
505 #line 101 "../../asn1/pres/pres.cnf"
506         register_ctx_id_and_oid(actx->pinfo, presentation_context_identifier, abstract_syntax_name_oid);
507
508   return offset;
509 }
510
511
512 static const ber_sequence_t Context_list_sequence_of[1] = {
513   { &hf_pres_Context_list_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_pres_Context_list_item },
514 };
515
516 static int
517 dissect_pres_Context_list(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
518   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
519                                       Context_list_sequence_of, hf_index, ett_pres_Context_list);
520
521   return offset;
522 }
523
524
525
526 static int
527 dissect_pres_Presentation_context_definition_list(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
528   offset = dissect_pres_Context_list(implicit_tag, tvb, offset, actx, tree, hf_index);
529
530   return offset;
531 }
532
533
534 static const ber_sequence_t Default_context_name_sequence[] = {
535   { &hf_pres_abstract_syntax_name, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_pres_Abstract_syntax_name },
536   { &hf_pres_transfer_syntax_name, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_pres_Transfer_syntax_name },
537   { NULL, 0, 0, 0, NULL }
538 };
539
540 static int
541 dissect_pres_Default_context_name(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
542   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
543                                    Default_context_name_sequence, hf_index, ett_pres_Default_context_name);
544
545   return offset;
546 }
547
548
549 static const asn_namedbit Presentation_requirements_bits[] = {
550   {  0, &hf_pres_Presentation_requirements_context_management, -1, -1, "context-management", NULL },
551   {  1, &hf_pres_Presentation_requirements_restoration, -1, -1, "restoration", NULL },
552   { 0, NULL, 0, 0, NULL, NULL }
553 };
554
555 static int
556 dissect_pres_Presentation_requirements(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
557   offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
558                                     Presentation_requirements_bits, hf_index, ett_pres_Presentation_requirements,
559                                     NULL);
560
561   return offset;
562 }
563
564
565 static const asn_namedbit User_session_requirements_bits[] = {
566   {  0, &hf_pres_User_session_requirements_half_duplex, -1, -1, "half-duplex", NULL },
567   {  1, &hf_pres_User_session_requirements_duplex, -1, -1, "duplex", NULL },
568   {  2, &hf_pres_User_session_requirements_expedited_data, -1, -1, "expedited-data", NULL },
569   {  3, &hf_pres_User_session_requirements_minor_synchronize, -1, -1, "minor-synchronize", NULL },
570   {  4, &hf_pres_User_session_requirements_major_synchronize, -1, -1, "major-synchronize", NULL },
571   {  5, &hf_pres_User_session_requirements_resynchronize, -1, -1, "resynchronize", NULL },
572   {  6, &hf_pres_User_session_requirements_activity_management, -1, -1, "activity-management", NULL },
573   {  7, &hf_pres_User_session_requirements_negotiated_release, -1, -1, "negotiated-release", NULL },
574   {  8, &hf_pres_User_session_requirements_capability_data, -1, -1, "capability-data", NULL },
575   {  9, &hf_pres_User_session_requirements_exceptions, -1, -1, "exceptions", NULL },
576   { 10, &hf_pres_User_session_requirements_typed_data, -1, -1, "typed-data", NULL },
577   { 11, &hf_pres_User_session_requirements_symmetric_synchronize, -1, -1, "symmetric-synchronize", NULL },
578   { 12, &hf_pres_User_session_requirements_data_separation, -1, -1, "data-separation", NULL },
579   { 0, NULL, 0, 0, NULL, NULL }
580 };
581
582 static int
583 dissect_pres_User_session_requirements(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
584   offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
585                                     User_session_requirements_bits, hf_index, ett_pres_User_session_requirements,
586                                     NULL);
587
588   return offset;
589 }
590
591
592 static const asn_namedbit Protocol_options_bits[] = {
593   {  0, &hf_pres_Protocol_options_nominated_context, -1, -1, "nominated-context", NULL },
594   {  1, &hf_pres_Protocol_options_short_encoding, -1, -1, "short-encoding", NULL },
595   {  2, &hf_pres_Protocol_options_packed_encoding_rules, -1, -1, "packed-encoding-rules", NULL },
596   { 0, NULL, 0, 0, NULL, NULL }
597 };
598
599 static int
600 dissect_pres_Protocol_options(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
601   offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
602                                     Protocol_options_bits, hf_index, ett_pres_Protocol_options,
603                                     NULL);
604
605   return offset;
606 }
607
608
609 static const ber_sequence_t T_extensions_sequence[] = {
610   { NULL, 0, 0, 0, NULL }
611 };
612
613 static int
614 dissect_pres_T_extensions(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
615   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
616                                    T_extensions_sequence, hf_index, ett_pres_T_extensions);
617
618   return offset;
619 }
620
621
622
623 static int
624 dissect_pres_Simply_encoded_data(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
625   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
626                                        NULL);
627
628   return offset;
629 }
630
631
632
633 static int
634 dissect_pres_T_single_ASN1_type(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
635 #line 37 "../../asn1/pres/pres.cnf"
636
637  tvbuff_t       *next_tvb;
638  char *oid; 
639
640         oid=find_oid_by_pres_ctx_id(actx->pinfo, presentation_context_identifier);
641         if(oid){
642                 next_tvb = tvb_new_subset_remaining(tvb, offset);
643                 call_ber_oid_callback(oid, next_tvb, offset, actx->pinfo, global_tree);
644         } else {
645                 proto_item *ti = proto_tree_add_text(tree, tvb, offset, -1,"dissector is not available");
646                 expert_add_info_format(actx->pinfo, ti, PI_UNDECODED, PI_WARN, "Dissector is not available");
647         }
648
649
650
651   return offset;
652 }
653
654
655
656 static int
657 dissect_pres_T_octet_aligned(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
658 #line 51 "../../asn1/pres/pres.cnf"
659
660  tvbuff_t       *next_tvb;
661  char *oid; 
662
663         oid=find_oid_by_pres_ctx_id(actx->pinfo, presentation_context_identifier);
664         if(oid){
665                 dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &next_tvb);
666                 call_ber_oid_callback(oid, next_tvb, offset, actx->pinfo, global_tree);
667         } else {
668                 proto_item *ti = proto_tree_add_text(tree, tvb, offset, -1,"dissector is not available");
669                 expert_add_info_format(actx->pinfo, ti, PI_UNDECODED, PI_WARN, "Dissector is not available");
670                   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
671                                        NULL);
672
673         }
674
675
676
677
678   return offset;
679 }
680
681
682
683 static int
684 dissect_pres_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_) {
685   offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
686                                     NULL, hf_index, -1,
687                                     NULL);
688
689   return offset;
690 }
691
692
693 static const value_string pres_T_presentation_data_values_vals[] = {
694   {   0, "single-ASN1-type" },
695   {   1, "octet-aligned" },
696   {   2, "arbitrary" },
697   { 0, NULL }
698 };
699
700 static const ber_choice_t T_presentation_data_values_choice[] = {
701   {   0, &hf_pres_single_ASN1_type, BER_CLASS_CON, 0, 0, dissect_pres_T_single_ASN1_type },
702   {   1, &hf_pres_octet_aligned  , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_pres_T_octet_aligned },
703   {   2, &hf_pres_arbitrary      , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_pres_BIT_STRING },
704   { 0, NULL, 0, 0, 0, NULL }
705 };
706
707 static int
708 dissect_pres_T_presentation_data_values(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
709   offset = dissect_ber_choice(actx, tree, tvb, offset,
710                                  T_presentation_data_values_choice, hf_index, ett_pres_T_presentation_data_values,
711                                  NULL);
712
713   return offset;
714 }
715
716
717 static const ber_sequence_t PDV_list_sequence[] = {
718   { &hf_pres_transfer_syntax_name, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_pres_Transfer_syntax_name },
719   { &hf_pres_presentation_context_identifier, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_pres_Presentation_context_identifier },
720   { &hf_pres_presentation_data_values, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_pres_T_presentation_data_values },
721   { NULL, 0, 0, 0, NULL }
722 };
723
724 static int
725 dissect_pres_PDV_list(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
726   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
727                                    PDV_list_sequence, hf_index, ett_pres_PDV_list);
728
729   return offset;
730 }
731
732
733 static const ber_sequence_t Fully_encoded_data_sequence_of[1] = {
734   { &hf_pres_Fully_encoded_data_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_pres_PDV_list },
735 };
736
737 static int
738 dissect_pres_Fully_encoded_data(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
739   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
740                                       Fully_encoded_data_sequence_of, hf_index, ett_pres_Fully_encoded_data);
741
742   return offset;
743 }
744
745
746 static const value_string pres_User_data_vals[] = {
747   {   0, "simply-encoded-data" },
748   {   1, "fully-encoded-data" },
749   { 0, NULL }
750 };
751
752 static const ber_choice_t User_data_choice[] = {
753   {   0, &hf_pres_simply_encoded_data, BER_CLASS_APP, 0, BER_FLAGS_IMPLTAG, dissect_pres_Simply_encoded_data },
754   {   1, &hf_pres_fully_encoded_data, BER_CLASS_APP, 1, BER_FLAGS_IMPLTAG, dissect_pres_Fully_encoded_data },
755   { 0, NULL, 0, 0, 0, NULL }
756 };
757
758 static int
759 dissect_pres_User_data(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
760   offset = dissect_ber_choice(actx, tree, tvb, offset,
761                                  User_data_choice, hf_index, ett_pres_User_data,
762                                  NULL);
763
764   return offset;
765 }
766
767
768 static const ber_sequence_t T_normal_mode_parameters_sequence[] = {
769   { &hf_pres_protocol_version, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_Protocol_version },
770   { &hf_pres_calling_presentation_selector, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_Calling_presentation_selector },
771   { &hf_pres_called_presentation_selector, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_Called_presentation_selector },
772   { &hf_pres_presentation_context_definition_list, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_Presentation_context_definition_list },
773   { &hf_pres_default_context_name, BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_Default_context_name },
774   { &hf_pres_presentation_requirements, BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_Presentation_requirements },
775   { &hf_pres_user_session_requirements, BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_User_session_requirements },
776   { &hf_pres_protocol_options, BER_CLASS_CON, 11, BER_FLAGS_OPTIONAL, dissect_pres_Protocol_options },
777   { &hf_pres_initiators_nominated_context, BER_CLASS_CON, 12, BER_FLAGS_OPTIONAL, dissect_pres_Presentation_context_identifier },
778   { &hf_pres_extensions     , BER_CLASS_CON, 14, BER_FLAGS_OPTIONAL, dissect_pres_T_extensions },
779   { &hf_pres_user_data      , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_pres_User_data },
780   { NULL, 0, 0, 0, NULL }
781 };
782
783 static int
784 dissect_pres_T_normal_mode_parameters(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
785   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
786                                    T_normal_mode_parameters_sequence, hf_index, ett_pres_T_normal_mode_parameters);
787
788   return offset;
789 }
790
791
792 static const ber_sequence_t CP_type_set[] = {
793   { &hf_pres_mode_selector  , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_pres_Mode_selector },
794   { &hf_pres_x410_mode_parameters, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_rtse_RTORQapdu },
795   { &hf_pres_normal_mode_parameters, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_T_normal_mode_parameters },
796   { NULL, 0, 0, 0, NULL }
797 };
798
799 static int
800 dissect_pres_CP_type(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
801   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
802                               CP_type_set, hf_index, ett_pres_CP_type);
803
804   return offset;
805 }
806
807
808
809 static int
810 dissect_pres_CPC_type(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
811   offset = dissect_pres_User_data(implicit_tag, tvb, offset, actx, tree, hf_index);
812
813   return offset;
814 }
815
816
817
818 static int
819 dissect_pres_Responding_presentation_selector(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
820   offset = dissect_pres_Presentation_selector(implicit_tag, tvb, offset, actx, tree, hf_index);
821
822   return offset;
823 }
824
825
826 static const value_string pres_Result_vals[] = {
827   {   0, "acceptance" },
828   {   1, "user-rejection" },
829   {   2, "provider-rejection" },
830   { 0, NULL }
831 };
832
833
834 static int
835 dissect_pres_Result(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
836   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
837                                                 NULL);
838
839   return offset;
840 }
841
842
843 static const value_string pres_T_provider_reason_vals[] = {
844   {   0, "reason-not-specified" },
845   {   1, "abstract-syntax-not-supported" },
846   {   2, "proposed-transfer-syntaxes-not-supported" },
847   {   3, "local-limit-on-DCS-exceeded" },
848   { 0, NULL }
849 };
850
851
852 static int
853 dissect_pres_T_provider_reason(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
854   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
855                                                 NULL);
856
857   return offset;
858 }
859
860
861 static const ber_sequence_t Result_list_item_sequence[] = {
862   { &hf_pres_result         , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_pres_Result },
863   { &hf_pres_transfer_syntax_name, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_Transfer_syntax_name },
864   { &hf_pres_provider_reason, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_T_provider_reason },
865   { NULL, 0, 0, 0, NULL }
866 };
867
868 static int
869 dissect_pres_Result_list_item(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
870   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
871                                    Result_list_item_sequence, hf_index, ett_pres_Result_list_item);
872
873   return offset;
874 }
875
876
877 static const ber_sequence_t Result_list_sequence_of[1] = {
878   { &hf_pres_Result_list_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_pres_Result_list_item },
879 };
880
881 static int
882 dissect_pres_Result_list(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
883   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
884                                       Result_list_sequence_of, hf_index, ett_pres_Result_list);
885
886   return offset;
887 }
888
889
890
891 static int
892 dissect_pres_Presentation_context_definition_result_list(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
893   offset = dissect_pres_Result_list(implicit_tag, tvb, offset, actx, tree, hf_index);
894
895   return offset;
896 }
897
898
899 static const ber_sequence_t T_CPA_PPDU_normal_mode_parameters_sequence[] = {
900   { &hf_pres_protocol_version, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_Protocol_version },
901   { &hf_pres_responding_presentation_selector, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_Responding_presentation_selector },
902   { &hf_pres_presentation_context_definition_result_list, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_Presentation_context_definition_result_list },
903   { &hf_pres_presentation_requirements, BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_Presentation_requirements },
904   { &hf_pres_user_session_requirements, BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_User_session_requirements },
905   { &hf_pres_protocol_options, BER_CLASS_CON, 11, BER_FLAGS_OPTIONAL, dissect_pres_Protocol_options },
906   { &hf_pres_responders_nominated_context, BER_CLASS_CON, 13, BER_FLAGS_OPTIONAL, dissect_pres_Presentation_context_identifier },
907   { &hf_pres_user_data      , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_pres_User_data },
908   { NULL, 0, 0, 0, NULL }
909 };
910
911 static int
912 dissect_pres_T_CPA_PPDU_normal_mode_parameters(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
913   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
914                                    T_CPA_PPDU_normal_mode_parameters_sequence, hf_index, ett_pres_T_CPA_PPDU_normal_mode_parameters);
915
916   return offset;
917 }
918
919
920 static const ber_sequence_t CPA_PPDU_set[] = {
921   { &hf_pres_mode_selector  , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_pres_Mode_selector },
922   { &hf_pres_cPR_PPDU_x400_mode_parameters, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_rtse_RTOACapdu },
923   { &hf_pres_cPU_PPDU_normal_mode_parameters, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_T_CPA_PPDU_normal_mode_parameters },
924   { NULL, 0, 0, 0, NULL }
925 };
926
927 static int
928 dissect_pres_CPA_PPDU(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
929   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
930                               CPA_PPDU_set, hf_index, ett_pres_CPA_PPDU);
931
932   return offset;
933 }
934
935
936
937 static int
938 dissect_pres_Default_context_result(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
939   offset = dissect_pres_Result(implicit_tag, tvb, offset, actx, tree, hf_index);
940
941   return offset;
942 }
943
944
945 static const value_string pres_Provider_reason_vals[] = {
946   {   0, "reason-not-specified" },
947   {   1, "temporary-congestion" },
948   {   2, "local-limit-exceeded" },
949   {   3, "called-presentation-address-unknown" },
950   {   4, "protocol-version-not-supported" },
951   {   5, "default-context-not-supported" },
952   {   6, "user-data-not-readable" },
953   {   7, "no-PSAP-available" },
954   { 0, NULL }
955 };
956
957
958 static int
959 dissect_pres_Provider_reason(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
960   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
961                                                 NULL);
962
963   return offset;
964 }
965
966
967 static const ber_sequence_t T_CPR_PPDU_normal_mode_parameters_sequence[] = {
968   { &hf_pres_protocol_version, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_Protocol_version },
969   { &hf_pres_responding_presentation_selector, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_Responding_presentation_selector },
970   { &hf_pres_presentation_context_definition_result_list, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_Presentation_context_definition_result_list },
971   { &hf_pres_default_context_result, BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_Default_context_result },
972   { &hf_pres_cPR_PPDU__provider_reason, BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_Provider_reason },
973   { &hf_pres_user_data      , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_pres_User_data },
974   { NULL, 0, 0, 0, NULL }
975 };
976
977 static int
978 dissect_pres_T_CPR_PPDU_normal_mode_parameters(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
979   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
980                                    T_CPR_PPDU_normal_mode_parameters_sequence, hf_index, ett_pres_T_CPR_PPDU_normal_mode_parameters);
981
982   return offset;
983 }
984
985
986 static const value_string pres_CPR_PPDU_vals[] = {
987   {   0, "x400-mode-parameters" },
988   {   1, "normal-mode-parameters" },
989   { 0, NULL }
990 };
991
992 static const ber_choice_t CPR_PPDU_choice[] = {
993   {   0, &hf_pres_cPU_PPDU_x400_mode_parameters, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_rtse_RTORJapdu },
994   {   1, &hf_pres_cPR_PPDU_normal_mode_parameters, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_pres_T_CPR_PPDU_normal_mode_parameters },
995   { 0, NULL, 0, 0, 0, NULL }
996 };
997
998 static int
999 dissect_pres_CPR_PPDU(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1000   offset = dissect_ber_choice(actx, tree, tvb, offset,
1001                                  CPR_PPDU_choice, hf_index, ett_pres_CPR_PPDU,
1002                                  NULL);
1003
1004   return offset;
1005 }
1006
1007
1008 static const ber_sequence_t Presentation_context_identifier_list_item_sequence[] = {
1009   { &hf_pres_presentation_context_identifier, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_pres_Presentation_context_identifier },
1010   { &hf_pres_transfer_syntax_name, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_pres_Transfer_syntax_name },
1011   { NULL, 0, 0, 0, NULL }
1012 };
1013
1014 static int
1015 dissect_pres_Presentation_context_identifier_list_item(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1016   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1017                                    Presentation_context_identifier_list_item_sequence, hf_index, ett_pres_Presentation_context_identifier_list_item);
1018
1019   return offset;
1020 }
1021
1022
1023 static const ber_sequence_t Presentation_context_identifier_list_sequence_of[1] = {
1024   { &hf_pres_Presentation_context_identifier_list_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_pres_Presentation_context_identifier_list_item },
1025 };
1026
1027 static int
1028 dissect_pres_Presentation_context_identifier_list(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1029   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
1030                                       Presentation_context_identifier_list_sequence_of, hf_index, ett_pres_Presentation_context_identifier_list);
1031
1032   return offset;
1033 }
1034
1035
1036 static const ber_sequence_t T_ARU_PPDU_normal_mode_parameters_sequence[] = {
1037   { &hf_pres_presentation_context_identifier_list, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_Presentation_context_identifier_list },
1038   { &hf_pres_user_data      , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_pres_User_data },
1039   { NULL, 0, 0, 0, NULL }
1040 };
1041
1042 static int
1043 dissect_pres_T_ARU_PPDU_normal_mode_parameters(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1044   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1045                                    T_ARU_PPDU_normal_mode_parameters_sequence, hf_index, ett_pres_T_ARU_PPDU_normal_mode_parameters);
1046
1047   return offset;
1048 }
1049
1050
1051 static const value_string pres_ARU_PPDU_vals[] = {
1052   {   0, "x400-mode-parameters" },
1053   {   1, "normal-mode-parameters" },
1054   { 0, NULL }
1055 };
1056
1057 static const ber_choice_t ARU_PPDU_choice[] = {
1058   {   0, &hf_pres_aRU_PPDU_x400_mode_parameters, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_rtse_RTABapdu },
1059   {   1, &hf_pres_aRU_PPDU_normal_mode_parameters, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_pres_T_ARU_PPDU_normal_mode_parameters },
1060   { 0, NULL, 0, 0, 0, NULL }
1061 };
1062
1063 static int
1064 dissect_pres_ARU_PPDU(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1065   offset = dissect_ber_choice(actx, tree, tvb, offset,
1066                                  ARU_PPDU_choice, hf_index, ett_pres_ARU_PPDU,
1067                                  NULL);
1068
1069   return offset;
1070 }
1071
1072
1073 static const value_string pres_Abort_reason_vals[] = {
1074   {   0, "reason-not-specified" },
1075   {   1, "unrecognized-ppdu" },
1076   {   2, "unexpected-ppdu" },
1077   {   3, "unexpected-session-service-primitive" },
1078   {   4, "unrecognized-ppdu-parameter" },
1079   {   5, "unexpected-ppdu-parameter" },
1080   {   6, "invalid-ppdu-parameter-value" },
1081   { 0, NULL }
1082 };
1083
1084
1085 static int
1086 dissect_pres_Abort_reason(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1087 #line 91 "../../asn1/pres/pres.cnf"
1088   guint32 reason;
1089
1090     offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1091                                                 &reason);
1092
1093
1094   col_append_fstr(actx->pinfo->cinfo, COL_INFO, " (%s)", val_to_str(reason, pres_Abort_reason_vals, "unknown: %d"));
1095
1096
1097
1098   return offset;
1099 }
1100
1101
1102 static const value_string pres_Event_identifier_vals[] = {
1103   {   0, "cp-PPDU" },
1104   {   1, "cpa-PPDU" },
1105   {   2, "cpr-PPDU" },
1106   {   3, "aru-PPDU" },
1107   {   4, "arp-PPDU" },
1108   {   5, "ac-PPDU" },
1109   {   6, "aca-PPDU" },
1110   {   7, "td-PPDU" },
1111   {   8, "ttd-PPDU" },
1112   {   9, "te-PPDU" },
1113   {  10, "tc-PPDU" },
1114   {  11, "tcc-PPDU" },
1115   {  12, "rs-PPDU" },
1116   {  13, "rsa-PPDU" },
1117   {  14, "s-release-indication" },
1118   {  15, "s-release-confirm" },
1119   {  16, "s-token-give-indication" },
1120   {  17, "s-token-please-indication" },
1121   {  18, "s-control-give-indication" },
1122   {  19, "s-sync-minor-indication" },
1123   {  20, "s-sync-minor-confirm" },
1124   {  21, "s-sync-major-indication" },
1125   {  22, "s-sync-major-confirm" },
1126   {  23, "s-p-exception-report-indication" },
1127   {  24, "s-u-exception-report-indication" },
1128   {  25, "s-activity-start-indication" },
1129   {  26, "s-activity-resume-indication" },
1130   {  27, "s-activity-interrupt-indication" },
1131   {  28, "s-activity-interrupt-confirm" },
1132   {  29, "s-activity-discard-indication" },
1133   {  30, "s-activity-discard-confirm" },
1134   {  31, "s-activity-end-indication" },
1135   {  32, "s-activity-end-confirm" },
1136   { 0, NULL }
1137 };
1138
1139
1140 static int
1141 dissect_pres_Event_identifier(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_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1143                                                 NULL);
1144
1145   return offset;
1146 }
1147
1148
1149 static const ber_sequence_t ARP_PPDU_sequence[] = {
1150   { &hf_pres_aRU_PPDU_provider_reason, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_Abort_reason },
1151   { &hf_pres_event_identifier, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_Event_identifier },
1152   { NULL, 0, 0, 0, NULL }
1153 };
1154
1155 static int
1156 dissect_pres_ARP_PPDU(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1157   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1158                                    ARP_PPDU_sequence, hf_index, ett_pres_ARP_PPDU);
1159
1160   return offset;
1161 }
1162
1163
1164 static const value_string pres_Abort_type_vals[] = {
1165   {   0, "aru-ppdu" },
1166   {   1, "arp-ppdu" },
1167   { 0, NULL }
1168 };
1169
1170 static const ber_choice_t Abort_type_choice[] = {
1171   {   0, &hf_pres_aru_ppdu       , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG, dissect_pres_ARU_PPDU },
1172   {   1, &hf_pres_arp_ppdu       , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_pres_ARP_PPDU },
1173   { 0, NULL, 0, 0, 0, NULL }
1174 };
1175
1176 static int
1177 dissect_pres_Abort_type(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1178   offset = dissect_ber_choice(actx, tree, tvb, offset,
1179                                  Abort_type_choice, hf_index, ett_pres_Abort_type,
1180                                  NULL);
1181
1182   return offset;
1183 }
1184
1185
1186
1187 static int
1188 dissect_pres_Presentation_context_addition_list(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1189   offset = dissect_pres_Context_list(implicit_tag, tvb, offset, actx, tree, hf_index);
1190
1191   return offset;
1192 }
1193
1194
1195 static const ber_sequence_t Presentation_context_deletion_list_sequence_of[1] = {
1196   { &hf_pres_Presentation_context_deletion_list_item, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_pres_Presentation_context_identifier },
1197 };
1198
1199 static int
1200 dissect_pres_Presentation_context_deletion_list(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1201   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
1202                                       Presentation_context_deletion_list_sequence_of, hf_index, ett_pres_Presentation_context_deletion_list);
1203
1204   return offset;
1205 }
1206
1207
1208 static const ber_sequence_t AC_PPDU_sequence[] = {
1209   { &hf_pres_presentation_context_addition_list, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_Presentation_context_addition_list },
1210   { &hf_pres_presentation_context_deletion_list, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_Presentation_context_deletion_list },
1211   { &hf_pres_user_data      , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_pres_User_data },
1212   { NULL, 0, 0, 0, NULL }
1213 };
1214
1215 static int
1216 dissect_pres_AC_PPDU(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1217   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1218                                    AC_PPDU_sequence, hf_index, ett_pres_AC_PPDU);
1219
1220   return offset;
1221 }
1222
1223
1224
1225 static int
1226 dissect_pres_Presentation_context_addition_result_list(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_pres_Result_list(implicit_tag, tvb, offset, actx, tree, hf_index);
1228
1229   return offset;
1230 }
1231
1232
1233 static const value_string pres_Presentation_context_deletion_result_list_item_vals[] = {
1234   {   0, "acceptance" },
1235   {   1, "user-rejection" },
1236   { 0, NULL }
1237 };
1238
1239
1240 static int
1241 dissect_pres_Presentation_context_deletion_result_list_item(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1242   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1243                                                 NULL);
1244
1245   return offset;
1246 }
1247
1248
1249 static const ber_sequence_t Presentation_context_deletion_result_list_sequence_of[1] = {
1250   { &hf_pres_Presentation_context_deletion_result_list_item, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_pres_Presentation_context_deletion_result_list_item },
1251 };
1252
1253 static int
1254 dissect_pres_Presentation_context_deletion_result_list(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1255   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
1256                                       Presentation_context_deletion_result_list_sequence_of, hf_index, ett_pres_Presentation_context_deletion_result_list);
1257
1258   return offset;
1259 }
1260
1261
1262 static const ber_sequence_t ACA_PPDU_sequence[] = {
1263   { &hf_pres_presentation_context_addition_result_list, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_Presentation_context_addition_result_list },
1264   { &hf_pres_presentation_context_deletion_result_list, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_Presentation_context_deletion_result_list },
1265   { &hf_pres_user_data      , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_pres_User_data },
1266   { NULL, 0, 0, 0, NULL }
1267 };
1268
1269 static int
1270 dissect_pres_ACA_PPDU(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1271   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1272                                    ACA_PPDU_sequence, hf_index, ett_pres_ACA_PPDU);
1273
1274   return offset;
1275 }
1276
1277
1278 static const value_string pres_Typed_data_type_vals[] = {
1279   {   0, "acPPDU" },
1280   {   1, "acaPPDU" },
1281   {   2, "ttdPPDU" },
1282   { 0, NULL }
1283 };
1284
1285 static const ber_choice_t Typed_data_type_choice[] = {
1286   {   0, &hf_pres_acPPDU         , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_pres_AC_PPDU },
1287   {   1, &hf_pres_acaPPDU        , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_pres_ACA_PPDU },
1288   {   2, &hf_pres_ttdPPDU        , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG, dissect_pres_User_data },
1289   { 0, NULL, 0, 0, 0, NULL }
1290 };
1291
1292 static int
1293 dissect_pres_Typed_data_type(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1294   offset = dissect_ber_choice(actx, tree, tvb, offset,
1295                                  Typed_data_type_choice, hf_index, ett_pres_Typed_data_type,
1296                                  NULL);
1297
1298   return offset;
1299 }
1300
1301
1302 static const ber_sequence_t RS_PPDU_sequence[] = {
1303   { &hf_pres_presentation_context_identifier_list, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_Presentation_context_identifier_list },
1304   { &hf_pres_user_data      , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_pres_User_data },
1305   { NULL, 0, 0, 0, NULL }
1306 };
1307
1308 static int
1309 dissect_pres_RS_PPDU(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1310   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1311                                    RS_PPDU_sequence, hf_index, ett_pres_RS_PPDU);
1312
1313   return offset;
1314 }
1315
1316
1317 static const ber_sequence_t RSA_PPDU_sequence[] = {
1318   { &hf_pres_presentation_context_identifier_list, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_Presentation_context_identifier_list },
1319   { &hf_pres_user_data      , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_pres_User_data },
1320   { NULL, 0, 0, 0, NULL }
1321 };
1322
1323 static int
1324 dissect_pres_RSA_PPDU(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1325   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1326                                    RSA_PPDU_sequence, hf_index, ett_pres_RSA_PPDU);
1327
1328   return offset;
1329 }
1330
1331
1332 static const ber_sequence_t UD_type_sequence[] = {
1333   { &hf_pres_protocol_version, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_Protocol_version },
1334   { &hf_pres_calling_presentation_selector, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_Calling_presentation_selector },
1335   { &hf_pres_called_presentation_selector, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_Called_presentation_selector },
1336   { &hf_pres_presentation_context_definition_list, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pres_Presentation_context_definition_list },
1337   { &hf_pres_user_data      , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_pres_User_data },
1338   { NULL, 0, 0, 0, NULL }
1339 };
1340
1341 static int
1342 dissect_pres_UD_type(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1343   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1344                                    UD_type_sequence, hf_index, ett_pres_UD_type);
1345
1346   return offset;
1347 }
1348
1349
1350 /*--- PDUs ---*/
1351
1352 static void dissect_UD_type_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1353   asn1_ctx_t asn1_ctx;
1354   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
1355   dissect_pres_UD_type(FALSE, tvb, 0, &asn1_ctx, tree, hf_pres_UD_type_PDU);
1356 }
1357
1358
1359 /*--- End of included file: packet-pres-fn.c ---*/
1360 #line 225 "../../asn1/pres/packet-pres-template.c"
1361
1362
1363 /*
1364  * Dissect an PPDU.
1365  */
1366 static int
1367 dissect_ppdu(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
1368 {
1369         proto_item *ti;
1370         proto_tree *pres_tree = NULL;
1371         asn1_ctx_t asn1_ctx;
1372         asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
1373
1374         /* do we have spdu type from the session dissector?  */
1375         if( !pinfo->private_data ){
1376                 if(tree){
1377                         proto_tree_add_text(tree, tvb, offset, -1,
1378                                 "Internal error:can't get spdu type from session dissector.");
1379                         return 0;
1380                 }
1381         }else{
1382                 session  = ( (struct SESSION_DATA_STRUCTURE*)(pinfo->private_data) );
1383                 if(session->spdu_type == 0 ){
1384                         if(tree){
1385                                 proto_tree_add_text(tree, tvb, offset, -1,
1386                                         "Internal error:wrong spdu type %x from session dissector.",session->spdu_type);
1387                                 return 0;
1388                         }
1389                 }
1390         }
1391         /*  set up type of PPDU */
1392         col_add_str(pinfo->cinfo, COL_INFO,
1393                     val_to_str(session->spdu_type, ses_vals, "Unknown PPDU type (0x%02x)"));
1394         if (tree){
1395                 ti = proto_tree_add_item(tree, proto_pres, tvb, offset, -1, ENC_NA);
1396                 pres_tree = proto_item_add_subtree(ti, ett_pres);
1397         }
1398
1399         switch(session->spdu_type){
1400                 case SES_CONNECTION_REQUEST:
1401                         offset = dissect_pres_CP_type(FALSE, tvb, offset, &asn1_ctx, pres_tree, hf_pres_CP_type);
1402                         break;
1403                 case SES_CONNECTION_ACCEPT:
1404                         offset = dissect_pres_CPA_PPDU(FALSE, tvb, offset, &asn1_ctx, pres_tree, hf_pres_CPA_PPDU);
1405                         break;
1406                 case SES_ABORT:
1407                 case SES_ABORT_ACCEPT:
1408                         offset = dissect_pres_Abort_type(FALSE, tvb, offset, &asn1_ctx, pres_tree, hf_pres_Abort_type);
1409                         break;
1410                 case SES_DATA_TRANSFER:
1411                         offset = dissect_pres_CPC_type(FALSE, tvb, offset, &asn1_ctx, pres_tree, hf_pres_user_data);
1412                         break;
1413                 case SES_TYPED_DATA:
1414                         offset = dissect_pres_Typed_data_type(FALSE, tvb, offset, &asn1_ctx, pres_tree, hf_pres_Typed_data_type);
1415                         break;
1416                 case SES_RESYNCHRONIZE:
1417                         offset = dissect_pres_RS_PPDU(FALSE, tvb, offset, &asn1_ctx, pres_tree, -1);
1418                         break;
1419                 case SES_RESYNCHRONIZE_ACK:
1420                         offset = dissect_pres_RSA_PPDU(FALSE, tvb, offset, &asn1_ctx, pres_tree, -1);
1421                         break;
1422                 case SES_REFUSE:
1423                         offset = dissect_pres_CPR_PPDU(FALSE, tvb, offset, &asn1_ctx, pres_tree, hf_pres_CPR_PPDU);
1424                         break;
1425                 default:
1426                         offset = dissect_pres_CPC_type(FALSE, tvb, offset, &asn1_ctx, pres_tree, hf_pres_user_data);
1427                         break;
1428         }
1429
1430         return offset;
1431 }
1432
1433 static void
1434 dissect_pres(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
1435 {
1436         int offset = 0, old_offset;
1437
1438         session = ((struct SESSION_DATA_STRUCTURE*)(pinfo->private_data));
1439
1440         /* first, try to check length   */
1441         /* do we have at least 4 bytes  */
1442         if (!tvb_bytes_exist(tvb, 0, 4)){
1443                 if (session && session->spdu_type != SES_MAJOR_SYNC_POINT) {
1444                         proto_tree_add_text(parent_tree, tvb, offset,
1445                                             tvb_reported_length_remaining(tvb,offset),"User data");
1446                         return;  /* no, it isn't a presentation PDU */
1447                 }
1448         }
1449
1450         /* save pointers for calling the acse dissector  */
1451         global_tree = parent_tree;
1452         global_pinfo = pinfo;
1453
1454         /* if the session unit-data packet then we process it */
1455         /* as a connectionless presentation protocol unit data */
1456         if(session && session->spdu_type == CLSES_UNIT_DATA)
1457         {
1458                 proto_tree * clpres_tree = NULL;
1459                 proto_item *ti;
1460
1461                 col_set_str(pinfo->cinfo, COL_PROTOCOL, "CL-PRES");
1462                 col_clear(pinfo->cinfo, COL_INFO);
1463
1464                 if (parent_tree)
1465                 {
1466                         ti = proto_tree_add_item(parent_tree, proto_clpres, tvb, offset, -1, ENC_NA);
1467                         clpres_tree = proto_item_add_subtree(ti, ett_pres);
1468                 }
1469
1470                 /* dissect the packet */
1471                 dissect_UD_type_PDU(tvb, pinfo, clpres_tree);
1472                 return;
1473         }
1474
1475         /*  we can't make any additional checking here   */
1476         /*  postpone it before dissector will have more information */
1477
1478         col_set_str(pinfo->cinfo, COL_PROTOCOL, "PRES");
1479         col_clear(pinfo->cinfo, COL_INFO);
1480
1481         if (session && session->spdu_type == SES_MAJOR_SYNC_POINT) {
1482                 /* This is a reassembly initiated in packet-ses */
1483                 char *oid = find_oid_by_pres_ctx_id (pinfo, session->pres_ctx_id);
1484                 if (oid) {
1485                         call_ber_oid_callback (oid, tvb, offset, pinfo, parent_tree);
1486                 } else {
1487                         proto_tree_add_text(parent_tree, tvb, offset,
1488                                             tvb_reported_length_remaining(tvb,offset),"User data");
1489                 }
1490                 return;
1491          }
1492
1493         while (tvb_reported_length_remaining(tvb, offset) > 0){
1494                 old_offset = offset;
1495                 offset = dissect_ppdu(tvb, offset, pinfo, parent_tree);
1496                 if(offset <= old_offset){
1497                         proto_tree_add_text(parent_tree, tvb, offset, -1,"Invalid offset");
1498                         THROW(ReportedBoundsError);
1499                 }
1500         }
1501 }
1502
1503
1504 /*--- proto_register_pres -------------------------------------------*/
1505 void proto_register_pres(void) {
1506
1507   /* List of fields */
1508   static hf_register_info hf[] = {
1509     { &hf_pres_CP_type,
1510       { "CP-type", "pres.cptype",
1511         FT_NONE, BASE_NONE, NULL, 0,
1512         NULL, HFILL }},
1513     { &hf_pres_CPA_PPDU,
1514       { "CPA-PPDU", "pres.cpapdu",
1515         FT_NONE, BASE_NONE, NULL, 0,
1516         NULL, HFILL }},
1517     { &hf_pres_Abort_type,
1518       { "Abort type", "pres.aborttype",
1519         FT_UINT32, BASE_DEC, VALS(pres_Abort_type_vals), 0,
1520         NULL, HFILL }},
1521     { &hf_pres_CPR_PPDU,
1522       { "CPR-PPDU", "pres.cprtype",
1523         FT_UINT32, BASE_DEC, VALS(pres_CPR_PPDU_vals), 0,
1524         NULL, HFILL }},
1525     { &hf_pres_Typed_data_type,
1526       { "Typed data type", "pres.Typed_data_type",
1527         FT_UINT32, BASE_DEC, VALS(pres_Typed_data_type_vals), 0,
1528         NULL, HFILL }},
1529
1530
1531
1532 /*--- Included file: packet-pres-hfarr.c ---*/
1533 #line 1 "../../asn1/pres/packet-pres-hfarr.c"
1534     { &hf_pres_UD_type_PDU,
1535       { "UD-type", "pres.UD_type_element",
1536         FT_NONE, BASE_NONE, NULL, 0,
1537         NULL, HFILL }},
1538     { &hf_pres_mode_selector,
1539       { "mode-selector", "pres.mode_selector_element",
1540         FT_NONE, BASE_NONE, NULL, 0,
1541         NULL, HFILL }},
1542     { &hf_pres_x410_mode_parameters,
1543       { "x410-mode-parameters", "pres.x410_mode_parameters_element",
1544         FT_NONE, BASE_NONE, NULL, 0,
1545         "RTORQapdu", HFILL }},
1546     { &hf_pres_normal_mode_parameters,
1547       { "normal-mode-parameters", "pres.normal_mode_parameters_element",
1548         FT_NONE, BASE_NONE, NULL, 0,
1549         NULL, HFILL }},
1550     { &hf_pres_protocol_version,
1551       { "protocol-version", "pres.protocol_version",
1552         FT_BYTES, BASE_NONE, NULL, 0,
1553         NULL, HFILL }},
1554     { &hf_pres_calling_presentation_selector,
1555       { "calling-presentation-selector", "pres.calling_presentation_selector",
1556         FT_BYTES, BASE_NONE, NULL, 0,
1557         NULL, HFILL }},
1558     { &hf_pres_called_presentation_selector,
1559       { "called-presentation-selector", "pres.called_presentation_selector",
1560         FT_BYTES, BASE_NONE, NULL, 0,
1561         NULL, HFILL }},
1562     { &hf_pres_presentation_context_definition_list,
1563       { "presentation-context-definition-list", "pres.presentation_context_definition_list",
1564         FT_UINT32, BASE_DEC, NULL, 0,
1565         NULL, HFILL }},
1566     { &hf_pres_default_context_name,
1567       { "default-context-name", "pres.default_context_name_element",
1568         FT_NONE, BASE_NONE, NULL, 0,
1569         NULL, HFILL }},
1570     { &hf_pres_presentation_requirements,
1571       { "presentation-requirements", "pres.presentation_requirements",
1572         FT_BYTES, BASE_NONE, NULL, 0,
1573         NULL, HFILL }},
1574     { &hf_pres_user_session_requirements,
1575       { "user-session-requirements", "pres.user_session_requirements",
1576         FT_BYTES, BASE_NONE, NULL, 0,
1577         NULL, HFILL }},
1578     { &hf_pres_protocol_options,
1579       { "protocol-options", "pres.protocol_options",
1580         FT_BYTES, BASE_NONE, NULL, 0,
1581         NULL, HFILL }},
1582     { &hf_pres_initiators_nominated_context,
1583       { "initiators-nominated-context", "pres.initiators_nominated_context",
1584         FT_INT32, BASE_DEC, NULL, 0,
1585         "Presentation_context_identifier", HFILL }},
1586     { &hf_pres_extensions,
1587       { "extensions", "pres.extensions_element",
1588         FT_NONE, BASE_NONE, NULL, 0,
1589         NULL, HFILL }},
1590     { &hf_pres_user_data,
1591       { "user-data", "pres.user_data",
1592         FT_UINT32, BASE_DEC, VALS(pres_User_data_vals), 0,
1593         NULL, HFILL }},
1594     { &hf_pres_cPR_PPDU_x400_mode_parameters,
1595       { "x410-mode-parameters", "pres.x410_mode_parameters_element",
1596         FT_NONE, BASE_NONE, NULL, 0,
1597         "RTOACapdu", HFILL }},
1598     { &hf_pres_cPU_PPDU_normal_mode_parameters,
1599       { "normal-mode-parameters", "pres.normal_mode_parameters_element",
1600         FT_NONE, BASE_NONE, NULL, 0,
1601         "T_CPA_PPDU_normal_mode_parameters", HFILL }},
1602     { &hf_pres_responding_presentation_selector,
1603       { "responding-presentation-selector", "pres.responding_presentation_selector",
1604         FT_BYTES, BASE_NONE, NULL, 0,
1605         NULL, HFILL }},
1606     { &hf_pres_presentation_context_definition_result_list,
1607       { "presentation-context-definition-result-list", "pres.presentation_context_definition_result_list",
1608         FT_UINT32, BASE_DEC, NULL, 0,
1609         NULL, HFILL }},
1610     { &hf_pres_responders_nominated_context,
1611       { "responders-nominated-context", "pres.responders_nominated_context",
1612         FT_INT32, BASE_DEC, NULL, 0,
1613         "Presentation_context_identifier", HFILL }},
1614     { &hf_pres_cPU_PPDU_x400_mode_parameters,
1615       { "x400-mode-parameters", "pres.x400_mode_parameters_element",
1616         FT_NONE, BASE_NONE, NULL, 0,
1617         "RTORJapdu", HFILL }},
1618     { &hf_pres_cPR_PPDU_normal_mode_parameters,
1619       { "normal-mode-parameters", "pres.normal_mode_parameters_element",
1620         FT_NONE, BASE_NONE, NULL, 0,
1621         "T_CPR_PPDU_normal_mode_parameters", HFILL }},
1622     { &hf_pres_default_context_result,
1623       { "default-context-result", "pres.default_context_result",
1624         FT_INT32, BASE_DEC, VALS(pres_Result_vals), 0,
1625         NULL, HFILL }},
1626     { &hf_pres_cPR_PPDU__provider_reason,
1627       { "provider-reason", "pres.provider_reason",
1628         FT_INT32, BASE_DEC, VALS(pres_Provider_reason_vals), 0,
1629         NULL, HFILL }},
1630     { &hf_pres_aru_ppdu,
1631       { "aru-ppdu", "pres.aru_ppdu",
1632         FT_UINT32, BASE_DEC, VALS(pres_ARU_PPDU_vals), 0,
1633         NULL, HFILL }},
1634     { &hf_pres_arp_ppdu,
1635       { "arp-ppdu", "pres.arp_ppdu_element",
1636         FT_NONE, BASE_NONE, NULL, 0,
1637         NULL, HFILL }},
1638     { &hf_pres_aRU_PPDU_x400_mode_parameters,
1639       { "x400-mode-parameters", "pres.x400_mode_parameters_element",
1640         FT_NONE, BASE_NONE, NULL, 0,
1641         "RTABapdu", HFILL }},
1642     { &hf_pres_aRU_PPDU_normal_mode_parameters,
1643       { "normal-mode-parameters", "pres.normal_mode_parameters_element",
1644         FT_NONE, BASE_NONE, NULL, 0,
1645         "T_ARU_PPDU_normal_mode_parameters", HFILL }},
1646     { &hf_pres_presentation_context_identifier_list,
1647       { "presentation-context-identifier-list", "pres.presentation_context_identifier_list",
1648         FT_UINT32, BASE_DEC, NULL, 0,
1649         NULL, HFILL }},
1650     { &hf_pres_aRU_PPDU_provider_reason,
1651       { "provider-reason", "pres.provider_reason",
1652         FT_INT32, BASE_DEC, VALS(pres_Abort_reason_vals), 0,
1653         "Abort_reason", HFILL }},
1654     { &hf_pres_event_identifier,
1655       { "event-identifier", "pres.event_identifier",
1656         FT_INT32, BASE_DEC, VALS(pres_Event_identifier_vals), 0,
1657         NULL, HFILL }},
1658     { &hf_pres_acPPDU,
1659       { "acPPDU", "pres.acPPDU_element",
1660         FT_NONE, BASE_NONE, NULL, 0,
1661         "AC_PPDU", HFILL }},
1662     { &hf_pres_acaPPDU,
1663       { "acaPPDU", "pres.acaPPDU_element",
1664         FT_NONE, BASE_NONE, NULL, 0,
1665         "ACA_PPDU", HFILL }},
1666     { &hf_pres_ttdPPDU,
1667       { "ttdPPDU", "pres.ttdPPDU",
1668         FT_UINT32, BASE_DEC, VALS(pres_User_data_vals), 0,
1669         "User_data", HFILL }},
1670     { &hf_pres_presentation_context_addition_list,
1671       { "presentation-context-addition-list", "pres.presentation_context_addition_list",
1672         FT_UINT32, BASE_DEC, NULL, 0,
1673         NULL, HFILL }},
1674     { &hf_pres_presentation_context_deletion_list,
1675       { "presentation-context-deletion-list", "pres.presentation_context_deletion_list",
1676         FT_UINT32, BASE_DEC, NULL, 0,
1677         NULL, HFILL }},
1678     { &hf_pres_presentation_context_addition_result_list,
1679       { "presentation-context-addition-result-list", "pres.presentation_context_addition_result_list",
1680         FT_UINT32, BASE_DEC, NULL, 0,
1681         NULL, HFILL }},
1682     { &hf_pres_presentation_context_deletion_result_list,
1683       { "presentation-context-deletion-result-list", "pres.presentation_context_deletion_result_list",
1684         FT_UINT32, BASE_DEC, NULL, 0,
1685         NULL, HFILL }},
1686     { &hf_pres_Context_list_item,
1687       { "Context-list item", "pres.Context_list_item_element",
1688         FT_NONE, BASE_NONE, NULL, 0,
1689         NULL, HFILL }},
1690     { &hf_pres_presentation_context_identifier,
1691       { "presentation-context-identifier", "pres.presentation_context_identifier",
1692         FT_INT32, BASE_DEC, NULL, 0,
1693         NULL, HFILL }},
1694     { &hf_pres_abstract_syntax_name,
1695       { "abstract-syntax-name", "pres.abstract_syntax_name",
1696         FT_OID, BASE_NONE, NULL, 0,
1697         NULL, HFILL }},
1698     { &hf_pres_transfer_syntax_name_list,
1699       { "transfer-syntax-name-list", "pres.transfer_syntax_name_list",
1700         FT_UINT32, BASE_DEC, NULL, 0,
1701         "SEQUENCE_OF_Transfer_syntax_name", HFILL }},
1702     { &hf_pres_transfer_syntax_name_list_item,
1703       { "Transfer-syntax-name", "pres.Transfer_syntax_name",
1704         FT_OID, BASE_NONE, NULL, 0,
1705         NULL, HFILL }},
1706     { &hf_pres_transfer_syntax_name,
1707       { "transfer-syntax-name", "pres.transfer_syntax_name",
1708         FT_OID, BASE_NONE, NULL, 0,
1709         NULL, HFILL }},
1710     { &hf_pres_mode_value,
1711       { "mode-value", "pres.mode_value",
1712         FT_INT32, BASE_DEC, VALS(pres_T_mode_value_vals), 0,
1713         NULL, HFILL }},
1714     { &hf_pres_Presentation_context_deletion_list_item,
1715       { "Presentation-context-identifier", "pres.Presentation_context_identifier",
1716         FT_INT32, BASE_DEC, NULL, 0,
1717         NULL, HFILL }},
1718     { &hf_pres_Presentation_context_deletion_result_list_item,
1719       { "Presentation-context-deletion-result-list item", "pres.Presentation_context_deletion_result_list_item",
1720         FT_INT32, BASE_DEC, VALS(pres_Presentation_context_deletion_result_list_item_vals), 0,
1721         NULL, HFILL }},
1722     { &hf_pres_Presentation_context_identifier_list_item,
1723       { "Presentation-context-identifier-list item", "pres.Presentation_context_identifier_list_item_element",
1724         FT_NONE, BASE_NONE, NULL, 0,
1725         NULL, HFILL }},
1726     { &hf_pres_Result_list_item,
1727       { "Result-list item", "pres.Result_list_item_element",
1728         FT_NONE, BASE_NONE, NULL, 0,
1729         NULL, HFILL }},
1730     { &hf_pres_result,
1731       { "result", "pres.result",
1732         FT_INT32, BASE_DEC, VALS(pres_Result_vals), 0,
1733         NULL, HFILL }},
1734     { &hf_pres_provider_reason,
1735       { "provider-reason", "pres.provider_reason",
1736         FT_INT32, BASE_DEC, VALS(pres_T_provider_reason_vals), 0,
1737         NULL, HFILL }},
1738     { &hf_pres_simply_encoded_data,
1739       { "simply-encoded-data", "pres.simply_encoded_data",
1740         FT_BYTES, BASE_NONE, NULL, 0,
1741         NULL, HFILL }},
1742     { &hf_pres_fully_encoded_data,
1743       { "fully-encoded-data", "pres.fully_encoded_data",
1744         FT_UINT32, BASE_DEC, NULL, 0,
1745         NULL, HFILL }},
1746     { &hf_pres_Fully_encoded_data_item,
1747       { "PDV-list", "pres.PDV_list_element",
1748         FT_NONE, BASE_NONE, NULL, 0,
1749         NULL, HFILL }},
1750     { &hf_pres_presentation_data_values,
1751       { "presentation-data-values", "pres.presentation_data_values",
1752         FT_UINT32, BASE_DEC, VALS(pres_T_presentation_data_values_vals), 0,
1753         NULL, HFILL }},
1754     { &hf_pres_single_ASN1_type,
1755       { "single-ASN1-type", "pres.single_ASN1_type_element",
1756         FT_NONE, BASE_NONE, NULL, 0,
1757         NULL, HFILL }},
1758     { &hf_pres_octet_aligned,
1759       { "octet-aligned", "pres.octet_aligned",
1760         FT_BYTES, BASE_NONE, NULL, 0,
1761         "T_octet_aligned", HFILL }},
1762     { &hf_pres_arbitrary,
1763       { "arbitrary", "pres.arbitrary",
1764         FT_BYTES, BASE_NONE, NULL, 0,
1765         "BIT_STRING", HFILL }},
1766     { &hf_pres_Presentation_requirements_context_management,
1767       { "context-management", "pres.context-management",
1768         FT_BOOLEAN, 8, NULL, 0x80,
1769         NULL, HFILL }},
1770     { &hf_pres_Presentation_requirements_restoration,
1771       { "restoration", "pres.restoration",
1772         FT_BOOLEAN, 8, NULL, 0x40,
1773         NULL, HFILL }},
1774     { &hf_pres_Protocol_options_nominated_context,
1775       { "nominated-context", "pres.nominated-context",
1776         FT_BOOLEAN, 8, NULL, 0x80,
1777         NULL, HFILL }},
1778     { &hf_pres_Protocol_options_short_encoding,
1779       { "short-encoding", "pres.short-encoding",
1780         FT_BOOLEAN, 8, NULL, 0x40,
1781         NULL, HFILL }},
1782     { &hf_pres_Protocol_options_packed_encoding_rules,
1783       { "packed-encoding-rules", "pres.packed-encoding-rules",
1784         FT_BOOLEAN, 8, NULL, 0x20,
1785         NULL, HFILL }},
1786     { &hf_pres_Protocol_version_version_1,
1787       { "version-1", "pres.version-1",
1788         FT_BOOLEAN, 8, NULL, 0x80,
1789         NULL, HFILL }},
1790     { &hf_pres_User_session_requirements_half_duplex,
1791       { "half-duplex", "pres.half-duplex",
1792         FT_BOOLEAN, 8, NULL, 0x80,
1793         NULL, HFILL }},
1794     { &hf_pres_User_session_requirements_duplex,
1795       { "duplex", "pres.duplex",
1796         FT_BOOLEAN, 8, NULL, 0x40,
1797         NULL, HFILL }},
1798     { &hf_pres_User_session_requirements_expedited_data,
1799       { "expedited-data", "pres.expedited-data",
1800         FT_BOOLEAN, 8, NULL, 0x20,
1801         NULL, HFILL }},
1802     { &hf_pres_User_session_requirements_minor_synchronize,
1803       { "minor-synchronize", "pres.minor-synchronize",
1804         FT_BOOLEAN, 8, NULL, 0x10,
1805         NULL, HFILL }},
1806     { &hf_pres_User_session_requirements_major_synchronize,
1807       { "major-synchronize", "pres.major-synchronize",
1808         FT_BOOLEAN, 8, NULL, 0x08,
1809         NULL, HFILL }},
1810     { &hf_pres_User_session_requirements_resynchronize,
1811       { "resynchronize", "pres.resynchronize",
1812         FT_BOOLEAN, 8, NULL, 0x04,
1813         NULL, HFILL }},
1814     { &hf_pres_User_session_requirements_activity_management,
1815       { "activity-management", "pres.activity-management",
1816         FT_BOOLEAN, 8, NULL, 0x02,
1817         NULL, HFILL }},
1818     { &hf_pres_User_session_requirements_negotiated_release,
1819       { "negotiated-release", "pres.negotiated-release",
1820         FT_BOOLEAN, 8, NULL, 0x01,
1821         NULL, HFILL }},
1822     { &hf_pres_User_session_requirements_capability_data,
1823       { "capability-data", "pres.capability-data",
1824         FT_BOOLEAN, 8, NULL, 0x80,
1825         NULL, HFILL }},
1826     { &hf_pres_User_session_requirements_exceptions,
1827       { "exceptions", "pres.exceptions",
1828         FT_BOOLEAN, 8, NULL, 0x40,
1829         NULL, HFILL }},
1830     { &hf_pres_User_session_requirements_typed_data,
1831       { "typed-data", "pres.typed-data",
1832         FT_BOOLEAN, 8, NULL, 0x20,
1833         NULL, HFILL }},
1834     { &hf_pres_User_session_requirements_symmetric_synchronize,
1835       { "symmetric-synchronize", "pres.symmetric-synchronize",
1836         FT_BOOLEAN, 8, NULL, 0x10,
1837         NULL, HFILL }},
1838     { &hf_pres_User_session_requirements_data_separation,
1839       { "data-separation", "pres.data-separation",
1840         FT_BOOLEAN, 8, NULL, 0x08,
1841         NULL, HFILL }},
1842
1843 /*--- End of included file: packet-pres-hfarr.c ---*/
1844 #line 396 "../../asn1/pres/packet-pres-template.c"
1845   };
1846
1847   /* List of subtrees */
1848   static gint *ett[] = {
1849                 &ett_pres,
1850
1851 /*--- Included file: packet-pres-ettarr.c ---*/
1852 #line 1 "../../asn1/pres/packet-pres-ettarr.c"
1853     &ett_pres_CP_type,
1854     &ett_pres_T_normal_mode_parameters,
1855     &ett_pres_T_extensions,
1856     &ett_pres_CPA_PPDU,
1857     &ett_pres_T_CPA_PPDU_normal_mode_parameters,
1858     &ett_pres_CPR_PPDU,
1859     &ett_pres_T_CPR_PPDU_normal_mode_parameters,
1860     &ett_pres_Abort_type,
1861     &ett_pres_ARU_PPDU,
1862     &ett_pres_T_ARU_PPDU_normal_mode_parameters,
1863     &ett_pres_ARP_PPDU,
1864     &ett_pres_Typed_data_type,
1865     &ett_pres_AC_PPDU,
1866     &ett_pres_ACA_PPDU,
1867     &ett_pres_RS_PPDU,
1868     &ett_pres_RSA_PPDU,
1869     &ett_pres_Context_list,
1870     &ett_pres_Context_list_item,
1871     &ett_pres_SEQUENCE_OF_Transfer_syntax_name,
1872     &ett_pres_Default_context_name,
1873     &ett_pres_Mode_selector,
1874     &ett_pres_Presentation_context_deletion_list,
1875     &ett_pres_Presentation_context_deletion_result_list,
1876     &ett_pres_Presentation_context_identifier_list,
1877     &ett_pres_Presentation_context_identifier_list_item,
1878     &ett_pres_Presentation_requirements,
1879     &ett_pres_Protocol_options,
1880     &ett_pres_Protocol_version,
1881     &ett_pres_Result_list,
1882     &ett_pres_Result_list_item,
1883     &ett_pres_User_data,
1884     &ett_pres_Fully_encoded_data,
1885     &ett_pres_PDV_list,
1886     &ett_pres_T_presentation_data_values,
1887     &ett_pres_User_session_requirements,
1888     &ett_pres_UD_type,
1889
1890 /*--- End of included file: packet-pres-ettarr.c ---*/
1891 #line 402 "../../asn1/pres/packet-pres-template.c"
1892   };
1893
1894   static uat_field_t users_flds[] = {
1895     UAT_FLD_DEC(pres_users,ctx_id,"Context Id","Presentation Context Identifier"),
1896     UAT_FLD_CSTRING(pres_users,oid,"Syntax Name OID","Abstract Syntax Name (Object Identifier)"),
1897     UAT_END_FIELDS
1898   };
1899
1900   uat_t* users_uat = uat_new("PRES Users Context List",
1901                              sizeof(pres_user_t),
1902                              "pres_context_list",
1903                              TRUE,
1904                              (void**) &pres_users,
1905                              &num_pres_users,
1906                              UAT_AFFECTS_DISSECTION, /* affects dissection of packets, but not set of named fields */
1907                              "ChPresContextList",
1908                              pres_copy_cb,
1909                              NULL,
1910                              pres_free_cb,
1911                              NULL,
1912                              users_flds);
1913
1914   static module_t *pres_module;
1915
1916   /* Register protocol */
1917   proto_pres = proto_register_protocol(PNAME, PSNAME, PFNAME);
1918   register_dissector("pres", dissect_pres, proto_pres);
1919
1920   /* Register connectionless protocol (just for the description) */
1921   proto_clpres = proto_register_protocol(CLPNAME, CLPSNAME, CLPFNAME);
1922
1923   /* Register fields and subtrees */
1924   proto_register_field_array(proto_pres, hf, array_length(hf));
1925   proto_register_subtree_array(ett, array_length(ett));
1926   register_init_routine(pres_init);
1927
1928   pres_module = prefs_register_protocol(proto_pres, NULL);
1929
1930   prefs_register_uat_preference(pres_module, "users_table", "Users Context List",
1931                                 "A table that enumerates user protocols to be used against"
1932                                 " specific presentation context identifiers",
1933                                 users_uat);
1934 }
1935
1936
1937 /*--- proto_reg_handoff_pres ---------------------------------------*/
1938 void proto_reg_handoff_pres(void) {
1939
1940 /*      register_ber_oid_dissector("0.4.0.0.1.1.1.1", dissect_pres, proto_pres,
1941           "itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) gsm-Network(1) abstractSyntax(1) pres(1) version1(1)"); */
1942
1943 }