MSWSP: add two more Property Sets
[wireshark-wip.git] / epan / dissectors / packet-pres.c
blobe9196acc43ac214a5b518ef69f8ff2435ab5e5b3
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 */
6 /* Input file: packet-pres-template.c */
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>
14 * $Id$
16 * Wireshark - Network traffic analyzer
17 * By Gerald Combs <gerald@wireshark.org>
18 * Copyright 1998 Gerald Combs
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.
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.
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.
35 #include "config.h"
37 #include <glib.h>
38 #include <epan/packet.h>
39 #include <epan/exceptions.h>
40 #include <epan/prefs.h>
41 #include <epan/conversation.h>
42 #include <epan/wmem/wmem.h>
43 #include <epan/expert.h>
44 #include <epan/uat.h>
46 #include <string.h>
48 #include <epan/asn1.h>
49 #include <epan/oids.h>
50 #include "packet-ber.h"
51 #include "packet-ses.h"
52 #include "packet-pres.h"
53 #include "packet-rtse.h"
56 #define PNAME "ISO 8823 OSI Presentation Protocol"
57 #define PSNAME "PRES"
58 #define PFNAME "pres"
60 #define CLPNAME "ISO 9576-1 OSI Connectionless Presentation Protocol"
61 #define CLPSNAME "CLPRES"
62 #define CLPFNAME "clpres"
64 /* Initialize the protocol and registered fields */
65 static int proto_pres = -1;
67 /* Initialize the connectionles protocol */
68 static int proto_clpres = -1;
70 /* pointers for acse dissector */
71 proto_tree *global_tree = NULL;
72 packet_info *global_pinfo = NULL;
74 static const char *abstract_syntax_name_oid;
75 static guint32 presentation_context_identifier;
77 /* to keep track of presentation context identifiers and protocol-oids */
78 typedef struct _pres_ctx_oid_t {
79 guint32 ctx_id;
80 char *oid;
81 guint32 index;
82 } pres_ctx_oid_t;
83 static GHashTable *pres_ctx_oid_table = NULL;
85 typedef struct _pres_user_t {
86 guint ctx_id;
87 char *oid;
88 } pres_user_t;
90 static pres_user_t *pres_users;
91 static guint num_pres_users;
93 static int hf_pres_CP_type = -1;
94 static int hf_pres_CPA_PPDU = -1;
95 static int hf_pres_Abort_type = -1;
96 static int hf_pres_CPR_PPDU = -1;
97 static int hf_pres_Typed_data_type = -1;
100 /*--- Included file: packet-pres-hf.c ---*/
101 #line 1 "../../asn1/pres/packet-pres-hf.c"
102 static int hf_pres_UD_type_PDU = -1; /* UD_type */
103 static int hf_pres_mode_selector = -1; /* Mode_selector */
104 static int hf_pres_x410_mode_parameters = -1; /* RTORQapdu */
105 static int hf_pres_normal_mode_parameters = -1; /* T_normal_mode_parameters */
106 static int hf_pres_protocol_version = -1; /* Protocol_version */
107 static int hf_pres_calling_presentation_selector = -1; /* Calling_presentation_selector */
108 static int hf_pres_called_presentation_selector = -1; /* Called_presentation_selector */
109 static int hf_pres_presentation_context_definition_list = -1; /* Presentation_context_definition_list */
110 static int hf_pres_default_context_name = -1; /* Default_context_name */
111 static int hf_pres_presentation_requirements = -1; /* Presentation_requirements */
112 static int hf_pres_user_session_requirements = -1; /* User_session_requirements */
113 static int hf_pres_protocol_options = -1; /* Protocol_options */
114 static int hf_pres_initiators_nominated_context = -1; /* Presentation_context_identifier */
115 static int hf_pres_extensions = -1; /* T_extensions */
116 static int hf_pres_user_data = -1; /* User_data */
117 static int hf_pres_cPR_PPDU_x400_mode_parameters = -1; /* RTOACapdu */
118 static int hf_pres_cPU_PPDU_normal_mode_parameters = -1; /* T_CPA_PPDU_normal_mode_parameters */
119 static int hf_pres_responding_presentation_selector = -1; /* Responding_presentation_selector */
120 static int hf_pres_presentation_context_definition_result_list = -1; /* Presentation_context_definition_result_list */
121 static int hf_pres_responders_nominated_context = -1; /* Presentation_context_identifier */
122 static int hf_pres_cPU_PPDU_x400_mode_parameters = -1; /* RTORJapdu */
123 static int hf_pres_cPR_PPDU_normal_mode_parameters = -1; /* T_CPR_PPDU_normal_mode_parameters */
124 static int hf_pres_default_context_result = -1; /* Default_context_result */
125 static int hf_pres_cPR_PPDU__provider_reason = -1; /* Provider_reason */
126 static int hf_pres_aru_ppdu = -1; /* ARU_PPDU */
127 static int hf_pres_arp_ppdu = -1; /* ARP_PPDU */
128 static int hf_pres_aRU_PPDU_x400_mode_parameters = -1; /* RTABapdu */
129 static int hf_pres_aRU_PPDU_normal_mode_parameters = -1; /* T_ARU_PPDU_normal_mode_parameters */
130 static int hf_pres_presentation_context_identifier_list = -1; /* Presentation_context_identifier_list */
131 static int hf_pres_aRU_PPDU_provider_reason = -1; /* Abort_reason */
132 static int hf_pres_event_identifier = -1; /* Event_identifier */
133 static int hf_pres_acPPDU = -1; /* AC_PPDU */
134 static int hf_pres_acaPPDU = -1; /* ACA_PPDU */
135 static int hf_pres_ttdPPDU = -1; /* User_data */
136 static int hf_pres_presentation_context_addition_list = -1; /* Presentation_context_addition_list */
137 static int hf_pres_presentation_context_deletion_list = -1; /* Presentation_context_deletion_list */
138 static int hf_pres_presentation_context_addition_result_list = -1; /* Presentation_context_addition_result_list */
139 static int hf_pres_presentation_context_deletion_result_list = -1; /* Presentation_context_deletion_result_list */
140 static int hf_pres_Context_list_item = -1; /* Context_list_item */
141 static int hf_pres_presentation_context_identifier = -1; /* Presentation_context_identifier */
142 static int hf_pres_abstract_syntax_name = -1; /* Abstract_syntax_name */
143 static int hf_pres_transfer_syntax_name_list = -1; /* SEQUENCE_OF_Transfer_syntax_name */
144 static int hf_pres_transfer_syntax_name_list_item = -1; /* Transfer_syntax_name */
145 static int hf_pres_transfer_syntax_name = -1; /* Transfer_syntax_name */
146 static int hf_pres_mode_value = -1; /* T_mode_value */
147 static int hf_pres_Presentation_context_deletion_list_item = -1; /* Presentation_context_identifier */
148 static int hf_pres_Presentation_context_deletion_result_list_item = -1; /* Presentation_context_deletion_result_list_item */
149 static int hf_pres_Presentation_context_identifier_list_item = -1; /* Presentation_context_identifier_list_item */
150 static int hf_pres_Result_list_item = -1; /* Result_list_item */
151 static int hf_pres_result = -1; /* Result */
152 static int hf_pres_provider_reason = -1; /* T_provider_reason */
153 static int hf_pres_simply_encoded_data = -1; /* Simply_encoded_data */
154 static int hf_pres_fully_encoded_data = -1; /* Fully_encoded_data */
155 static int hf_pres_Fully_encoded_data_item = -1; /* PDV_list */
156 static int hf_pres_presentation_data_values = -1; /* T_presentation_data_values */
157 static int hf_pres_single_ASN1_type = -1; /* T_single_ASN1_type */
158 static int hf_pres_octet_aligned = -1; /* T_octet_aligned */
159 static int hf_pres_arbitrary = -1; /* BIT_STRING */
160 /* named bits */
161 static int hf_pres_Presentation_requirements_context_management = -1;
162 static int hf_pres_Presentation_requirements_restoration = -1;
163 static int hf_pres_Protocol_options_nominated_context = -1;
164 static int hf_pres_Protocol_options_short_encoding = -1;
165 static int hf_pres_Protocol_options_packed_encoding_rules = -1;
166 static int hf_pres_Protocol_version_version_1 = -1;
167 static int hf_pres_User_session_requirements_half_duplex = -1;
168 static int hf_pres_User_session_requirements_duplex = -1;
169 static int hf_pres_User_session_requirements_expedited_data = -1;
170 static int hf_pres_User_session_requirements_minor_synchronize = -1;
171 static int hf_pres_User_session_requirements_major_synchronize = -1;
172 static int hf_pres_User_session_requirements_resynchronize = -1;
173 static int hf_pres_User_session_requirements_activity_management = -1;
174 static int hf_pres_User_session_requirements_negotiated_release = -1;
175 static int hf_pres_User_session_requirements_capability_data = -1;
176 static int hf_pres_User_session_requirements_exceptions = -1;
177 static int hf_pres_User_session_requirements_typed_data = -1;
178 static int hf_pres_User_session_requirements_symmetric_synchronize = -1;
179 static int hf_pres_User_session_requirements_data_separation = -1;
181 /*--- End of included file: packet-pres-hf.c ---*/
182 #line 92 "../../asn1/pres/packet-pres-template.c"
184 /* Initialize the subtree pointers */
185 static gint ett_pres = -1;
188 /*--- Included file: packet-pres-ett.c ---*/
189 #line 1 "../../asn1/pres/packet-pres-ett.c"
190 static gint ett_pres_CP_type = -1;
191 static gint ett_pres_T_normal_mode_parameters = -1;
192 static gint ett_pres_T_extensions = -1;
193 static gint ett_pres_CPA_PPDU = -1;
194 static gint ett_pres_T_CPA_PPDU_normal_mode_parameters = -1;
195 static gint ett_pres_CPR_PPDU = -1;
196 static gint ett_pres_T_CPR_PPDU_normal_mode_parameters = -1;
197 static gint ett_pres_Abort_type = -1;
198 static gint ett_pres_ARU_PPDU = -1;
199 static gint ett_pres_T_ARU_PPDU_normal_mode_parameters = -1;
200 static gint ett_pres_ARP_PPDU = -1;
201 static gint ett_pres_Typed_data_type = -1;
202 static gint ett_pres_AC_PPDU = -1;
203 static gint ett_pres_ACA_PPDU = -1;
204 static gint ett_pres_RS_PPDU = -1;
205 static gint ett_pres_RSA_PPDU = -1;
206 static gint ett_pres_Context_list = -1;
207 static gint ett_pres_Context_list_item = -1;
208 static gint ett_pres_SEQUENCE_OF_Transfer_syntax_name = -1;
209 static gint ett_pres_Default_context_name = -1;
210 static gint ett_pres_Mode_selector = -1;
211 static gint ett_pres_Presentation_context_deletion_list = -1;
212 static gint ett_pres_Presentation_context_deletion_result_list = -1;
213 static gint ett_pres_Presentation_context_identifier_list = -1;
214 static gint ett_pres_Presentation_context_identifier_list_item = -1;
215 static gint ett_pres_Presentation_requirements = -1;
216 static gint ett_pres_Protocol_options = -1;
217 static gint ett_pres_Protocol_version = -1;
218 static gint ett_pres_Result_list = -1;
219 static gint ett_pres_Result_list_item = -1;
220 static gint ett_pres_User_data = -1;
221 static gint ett_pres_Fully_encoded_data = -1;
222 static gint ett_pres_PDV_list = -1;
223 static gint ett_pres_T_presentation_data_values = -1;
224 static gint ett_pres_User_session_requirements = -1;
225 static gint ett_pres_UD_type = -1;
227 /*--- End of included file: packet-pres-ett.c ---*/
228 #line 97 "../../asn1/pres/packet-pres-template.c"
230 static expert_field ei_pres_dissector_not_available = EI_INIT;
232 UAT_DEC_CB_DEF(pres_users, ctx_id, pres_user_t)
233 UAT_CSTRING_CB_DEF(pres_users, oid, pres_user_t)
235 static guint
236 pres_ctx_oid_hash(gconstpointer k)
238 pres_ctx_oid_t *pco=(pres_ctx_oid_t *)k;
239 return pco->ctx_id;
242 static gint
243 pres_ctx_oid_equal(gconstpointer k1, gconstpointer k2)
245 pres_ctx_oid_t *pco1=(pres_ctx_oid_t *)k1;
246 pres_ctx_oid_t *pco2=(pres_ctx_oid_t *)k2;
247 return (pco1->ctx_id==pco2->ctx_id && pco1->index==pco2->index);
250 static void
251 pres_init(void)
253 if( pres_ctx_oid_table ){
254 g_hash_table_destroy(pres_ctx_oid_table);
255 pres_ctx_oid_table = NULL;
257 pres_ctx_oid_table = g_hash_table_new(pres_ctx_oid_hash,
258 pres_ctx_oid_equal);
262 static void
263 register_ctx_id_and_oid(packet_info *pinfo _U_, guint32 idx, const char *oid)
265 pres_ctx_oid_t *pco, *tmppco;
266 conversation_t *conversation;
268 if(!oid){
269 /* we did not get any oid name, malformed packet? */
270 return;
273 pco=wmem_new(wmem_file_scope(), pres_ctx_oid_t);
274 pco->ctx_id=idx;
275 pco->oid=wmem_strdup(wmem_file_scope(), oid);
276 conversation=find_conversation (pinfo->fd->num, &pinfo->src, &pinfo->dst,
277 pinfo->ptype, pinfo->srcport, pinfo->destport, 0);
278 if (conversation) {
279 pco->index = conversation->index;
280 } else {
281 pco->index = 0;
284 /* if this ctx already exists, remove the old one first */
285 tmppco=(pres_ctx_oid_t *)g_hash_table_lookup(pres_ctx_oid_table, pco);
286 if(tmppco){
287 g_hash_table_remove(pres_ctx_oid_table, tmppco);
290 g_hash_table_insert(pres_ctx_oid_table, pco, pco);
293 static char *
294 find_oid_in_users_table(packet_info *pinfo, guint32 ctx_id)
296 guint i;
298 for (i = 0; i < num_pres_users; i++) {
299 pres_user_t *u = &(pres_users[i]);
301 if (u->ctx_id == ctx_id) {
302 /* Register oid so other dissectors can find this connection */
303 register_ctx_id_and_oid(pinfo, u->ctx_id, u->oid);
304 return u->oid;
308 return NULL;
311 char *
312 find_oid_by_pres_ctx_id(packet_info *pinfo, guint32 idx)
314 pres_ctx_oid_t pco, *tmppco;
315 conversation_t *conversation;
317 pco.ctx_id=idx;
318 conversation=find_conversation (pinfo->fd->num, &pinfo->src, &pinfo->dst,
319 pinfo->ptype, pinfo->srcport, pinfo->destport, 0);
320 if (conversation) {
321 pco.index = conversation->index;
322 } else {
323 pco.index = 0;
326 tmppco=(pres_ctx_oid_t *)g_hash_table_lookup(pres_ctx_oid_table, &pco);
327 if(tmppco){
328 return tmppco->oid;
331 return find_oid_in_users_table(pinfo, idx);
334 static void *
335 pres_copy_cb(void *dest, const void *orig, size_t len _U_)
337 pres_user_t *u = (pres_user_t *)dest;
338 const pres_user_t *o = (const pres_user_t *)orig;
340 u->ctx_id = o->ctx_id;
341 u->oid = g_strdup(o->oid);
343 return dest;
346 static void
347 pres_free_cb(void *r)
349 pres_user_t *u = (pres_user_t *)r;
351 g_free(u->oid);
356 /*--- Included file: packet-pres-fn.c ---*/
357 #line 1 "../../asn1/pres/packet-pres-fn.c"
359 static const value_string pres_T_mode_value_vals[] = {
360 { 0, "x410-1984-mode" },
361 { 1, "normal-mode" },
362 { 0, NULL }
366 static int
367 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_) {
368 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
369 NULL);
371 return offset;
375 static const ber_sequence_t Mode_selector_set[] = {
376 { &hf_pres_mode_value , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_pres_T_mode_value },
377 { NULL, 0, 0, 0, NULL }
380 static int
381 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_) {
382 offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
383 Mode_selector_set, hf_index, ett_pres_Mode_selector);
385 return offset;
389 static const asn_namedbit Protocol_version_bits[] = {
390 { 0, &hf_pres_Protocol_version_version_1, -1, -1, "version-1", NULL },
391 { 0, NULL, 0, 0, NULL, NULL }
394 static int
395 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_) {
396 offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
397 Protocol_version_bits, hf_index, ett_pres_Protocol_version,
398 NULL);
400 return offset;
405 static int
406 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_) {
407 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
408 NULL);
410 return offset;
415 static int
416 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_) {
417 offset = dissect_pres_Presentation_selector(implicit_tag, tvb, offset, actx, tree, hf_index);
419 return offset;
424 static int
425 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_) {
426 offset = dissect_pres_Presentation_selector(implicit_tag, tvb, offset, actx, tree, hf_index);
428 return offset;
433 static int
434 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_) {
435 #line 73 "../../asn1/pres/pres.cnf"
436 const char *name;
437 char *oid;
438 struct SESSION_DATA_STRUCTURE* session = (struct SESSION_DATA_STRUCTURE*)actx->private_data;
440 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
441 &presentation_context_identifier);
444 if(session)
445 session->pres_ctx_id = presentation_context_identifier;
447 oid = find_oid_by_pres_ctx_id(actx->pinfo, presentation_context_identifier);
449 if(oid && (name = oid_resolved_from_string(oid))) {
450 proto_item_append_text(actx->created_item, " (%s)", name);
455 return offset;
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);
464 return offset;
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);
473 return offset;
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 },
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);
486 return offset;
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 }
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 99 "../../asn1/pres/pres.cnf"
500 abstract_syntax_name_oid=NULL;
502 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
503 Context_list_item_sequence, hf_index, ett_pres_Context_list_item);
505 #line 102 "../../asn1/pres/pres.cnf"
506 register_ctx_id_and_oid(actx->pinfo, presentation_context_identifier, abstract_syntax_name_oid);
508 return offset;
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 },
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);
521 return offset;
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);
530 return offset;
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 }
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);
545 return offset;
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 }
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);
561 return offset;
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 }
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);
588 return offset;
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 }
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);
605 return offset;
609 static const ber_sequence_t T_extensions_sequence[] = {
610 { NULL, 0, 0, 0, NULL }
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);
618 return offset;
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);
628 return offset;
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"
637 tvbuff_t *next_tvb;
638 char *oid;
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, actx->private_data);
644 } else {
645 proto_tree_add_expert(tree, actx->pinfo, &ei_pres_dissector_not_available,
646 tvb, offset, -1);
651 return offset;
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"
660 tvbuff_t *next_tvb;
661 char *oid;
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, actx->private_data);
667 } else {
668 proto_tree_add_expert(tree, actx->pinfo, &ei_pres_dissector_not_available,
669 tvb, offset, -1);
670 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
671 NULL);
678 return offset;
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);
689 return offset;
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 }
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 }
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);
713 return offset;
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 }
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);
729 return offset;
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 },
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);
742 return offset;
746 static const value_string pres_User_data_vals[] = {
747 { 0, "simply-encoded-data" },
748 { 1, "fully-encoded-data" },
749 { 0, NULL }
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 }
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);
764 return offset;
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 }
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);
788 return offset;
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 }
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);
804 return offset;
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);
813 return offset;
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);
822 return offset;
826 static const value_string pres_Result_vals[] = {
827 { 0, "acceptance" },
828 { 1, "user-rejection" },
829 { 2, "provider-rejection" },
830 { 0, NULL }
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);
839 return offset;
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 }
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);
857 return offset;
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 }
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);
873 return offset;
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 },
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);
886 return offset;
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);
895 return offset;
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 }
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);
916 return offset;
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 }
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);
932 return offset;
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);
941 return offset;
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 }
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);
963 return offset;
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 }
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);
982 return offset;
986 static const value_string pres_CPR_PPDU_vals[] = {
987 { 0, "x400-mode-parameters" },
988 { 1, "normal-mode-parameters" },
989 { 0, NULL }
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 }
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);
1004 return offset;
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 }
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);
1019 return offset;
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 },
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);
1032 return offset;
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 }
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);
1047 return offset;
1051 static const value_string pres_ARU_PPDU_vals[] = {
1052 { 0, "x400-mode-parameters" },
1053 { 1, "normal-mode-parameters" },
1054 { 0, NULL }
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 }
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);
1069 return offset;
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 }
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 92 "../../asn1/pres/pres.cnf"
1088 guint32 reason;
1090 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1091 &reason);
1094 col_append_fstr(actx->pinfo->cinfo, COL_INFO, " (%s)", val_to_str(reason, pres_Abort_reason_vals, "unknown: %d"));
1098 return offset;
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 }
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);
1145 return offset;
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 }
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);
1160 return offset;
1164 static const value_string pres_Abort_type_vals[] = {
1165 { 0, "aru-ppdu" },
1166 { 1, "arp-ppdu" },
1167 { 0, NULL }
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 }
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);
1182 return offset;
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);
1191 return offset;
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 },
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);
1204 return offset;
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 }
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);
1220 return offset;
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);
1229 return offset;
1233 static const value_string pres_Presentation_context_deletion_result_list_item_vals[] = {
1234 { 0, "acceptance" },
1235 { 1, "user-rejection" },
1236 { 0, NULL }
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);
1245 return offset;
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 },
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);
1258 return offset;
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 }
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);
1274 return offset;
1278 static const value_string pres_Typed_data_type_vals[] = {
1279 { 0, "acPPDU" },
1280 { 1, "acaPPDU" },
1281 { 2, "ttdPPDU" },
1282 { 0, NULL }
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 }
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);
1298 return offset;
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 }
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);
1313 return offset;
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 }
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);
1328 return offset;
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 }
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);
1346 return offset;
1350 /*--- PDUs ---*/
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);
1359 /*--- End of included file: packet-pres-fn.c ---*/
1360 #line 224 "../../asn1/pres/packet-pres-template.c"
1364 * Dissect an PPDU.
1366 static int
1367 dissect_ppdu(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, struct SESSION_DATA_STRUCTURE* local_session)
1369 proto_item *ti;
1370 proto_tree *pres_tree;
1371 struct SESSION_DATA_STRUCTURE* session;
1372 asn1_ctx_t asn1_ctx;
1373 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
1375 /* do we have spdu type from the session dissector? */
1376 if( local_session == NULL ){
1377 proto_tree_add_text(tree, tvb, offset, -1,
1378 "Internal error:can't get spdu type from session dissector.");
1379 return 0;
1382 session = local_session;
1383 if(session->spdu_type == 0 ){
1384 proto_tree_add_text(tree, tvb, offset, -1,
1385 "Internal error:wrong spdu type %x from session dissector.",session->spdu_type);
1386 return 0;
1389 /* set up type of PPDU */
1390 col_add_str(pinfo->cinfo, COL_INFO,
1391 val_to_str(session->spdu_type, ses_vals, "Unknown PPDU type (0x%02x)"));
1393 asn1_ctx.private_data = session;
1395 ti = proto_tree_add_item(tree, proto_pres, tvb, offset, -1, ENC_NA);
1396 pres_tree = proto_item_add_subtree(ti, ett_pres);
1398 switch(session->spdu_type){
1399 case SES_CONNECTION_REQUEST:
1400 offset = dissect_pres_CP_type(FALSE, tvb, offset, &asn1_ctx, pres_tree, hf_pres_CP_type);
1401 break;
1402 case SES_CONNECTION_ACCEPT:
1403 offset = dissect_pres_CPA_PPDU(FALSE, tvb, offset, &asn1_ctx, pres_tree, hf_pres_CPA_PPDU);
1404 break;
1405 case SES_ABORT:
1406 case SES_ABORT_ACCEPT:
1407 offset = dissect_pres_Abort_type(FALSE, tvb, offset, &asn1_ctx, pres_tree, hf_pres_Abort_type);
1408 break;
1409 case SES_DATA_TRANSFER:
1410 offset = dissect_pres_CPC_type(FALSE, tvb, offset, &asn1_ctx, pres_tree, hf_pres_user_data);
1411 break;
1412 case SES_TYPED_DATA:
1413 offset = dissect_pres_Typed_data_type(FALSE, tvb, offset, &asn1_ctx, pres_tree, hf_pres_Typed_data_type);
1414 break;
1415 case SES_RESYNCHRONIZE:
1416 offset = dissect_pres_RS_PPDU(FALSE, tvb, offset, &asn1_ctx, pres_tree, -1);
1417 break;
1418 case SES_RESYNCHRONIZE_ACK:
1419 offset = dissect_pres_RSA_PPDU(FALSE, tvb, offset, &asn1_ctx, pres_tree, -1);
1420 break;
1421 case SES_REFUSE:
1422 offset = dissect_pres_CPR_PPDU(FALSE, tvb, offset, &asn1_ctx, pres_tree, hf_pres_CPR_PPDU);
1423 break;
1424 default:
1425 offset = dissect_pres_CPC_type(FALSE, tvb, offset, &asn1_ctx, pres_tree, hf_pres_user_data);
1426 break;
1429 return offset;
1432 static int
1433 dissect_pres(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* data)
1435 int offset = 0, old_offset;
1436 struct SESSION_DATA_STRUCTURE* session;
1438 session = ((struct SESSION_DATA_STRUCTURE*)data);
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 0; /* no, it isn't a presentation PDU */
1450 /* save pointers for calling the acse dissector */
1451 global_tree = parent_tree;
1452 global_pinfo = pinfo;
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)
1458 proto_tree * clpres_tree = NULL;
1459 proto_item *ti;
1461 col_set_str(pinfo->cinfo, COL_PROTOCOL, "CL-PRES");
1462 col_clear(pinfo->cinfo, COL_INFO);
1464 if (parent_tree)
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);
1470 /* dissect the packet */
1471 dissect_UD_type_PDU(tvb, pinfo, clpres_tree);
1472 return tvb_length(tvb);
1475 /* we can't make any additional checking here */
1476 /* postpone it before dissector will have more information */
1478 col_set_str(pinfo->cinfo, COL_PROTOCOL, "PRES");
1479 col_clear(pinfo->cinfo, COL_INFO);
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, session);
1486 } else {
1487 proto_tree_add_text(parent_tree, tvb, offset,
1488 tvb_reported_length_remaining(tvb,offset),"User data");
1490 return tvb_length(tvb);
1493 while (tvb_reported_length_remaining(tvb, offset) > 0){
1494 old_offset = offset;
1495 offset = dissect_ppdu(tvb, offset, pinfo, parent_tree, session);
1496 if(offset <= old_offset){
1497 proto_tree_add_text(parent_tree, tvb, offset, -1,"Invalid offset");
1498 THROW(ReportedBoundsError);
1502 return tvb_length(tvb);
1506 /*--- proto_register_pres -------------------------------------------*/
1507 void proto_register_pres(void) {
1509 /* List of fields */
1510 static hf_register_info hf[] = {
1511 { &hf_pres_CP_type,
1512 { "CP-type", "pres.cptype",
1513 FT_NONE, BASE_NONE, NULL, 0,
1514 NULL, HFILL }},
1515 { &hf_pres_CPA_PPDU,
1516 { "CPA-PPDU", "pres.cpapdu",
1517 FT_NONE, BASE_NONE, NULL, 0,
1518 NULL, HFILL }},
1519 { &hf_pres_Abort_type,
1520 { "Abort type", "pres.aborttype",
1521 FT_UINT32, BASE_DEC, VALS(pres_Abort_type_vals), 0,
1522 NULL, HFILL }},
1523 { &hf_pres_CPR_PPDU,
1524 { "CPR-PPDU", "pres.cprtype",
1525 FT_UINT32, BASE_DEC, VALS(pres_CPR_PPDU_vals), 0,
1526 NULL, HFILL }},
1527 { &hf_pres_Typed_data_type,
1528 { "Typed data type", "pres.Typed_data_type",
1529 FT_UINT32, BASE_DEC, VALS(pres_Typed_data_type_vals), 0,
1530 NULL, HFILL }},
1534 /*--- Included file: packet-pres-hfarr.c ---*/
1535 #line 1 "../../asn1/pres/packet-pres-hfarr.c"
1536 { &hf_pres_UD_type_PDU,
1537 { "UD-type", "pres.UD_type_element",
1538 FT_NONE, BASE_NONE, NULL, 0,
1539 NULL, HFILL }},
1540 { &hf_pres_mode_selector,
1541 { "mode-selector", "pres.mode_selector_element",
1542 FT_NONE, BASE_NONE, NULL, 0,
1543 NULL, HFILL }},
1544 { &hf_pres_x410_mode_parameters,
1545 { "x410-mode-parameters", "pres.x410_mode_parameters_element",
1546 FT_NONE, BASE_NONE, NULL, 0,
1547 "RTORQapdu", HFILL }},
1548 { &hf_pres_normal_mode_parameters,
1549 { "normal-mode-parameters", "pres.normal_mode_parameters_element",
1550 FT_NONE, BASE_NONE, NULL, 0,
1551 NULL, HFILL }},
1552 { &hf_pres_protocol_version,
1553 { "protocol-version", "pres.protocol_version",
1554 FT_BYTES, BASE_NONE, NULL, 0,
1555 NULL, HFILL }},
1556 { &hf_pres_calling_presentation_selector,
1557 { "calling-presentation-selector", "pres.calling_presentation_selector",
1558 FT_BYTES, BASE_NONE, NULL, 0,
1559 NULL, HFILL }},
1560 { &hf_pres_called_presentation_selector,
1561 { "called-presentation-selector", "pres.called_presentation_selector",
1562 FT_BYTES, BASE_NONE, NULL, 0,
1563 NULL, HFILL }},
1564 { &hf_pres_presentation_context_definition_list,
1565 { "presentation-context-definition-list", "pres.presentation_context_definition_list",
1566 FT_UINT32, BASE_DEC, NULL, 0,
1567 NULL, HFILL }},
1568 { &hf_pres_default_context_name,
1569 { "default-context-name", "pres.default_context_name_element",
1570 FT_NONE, BASE_NONE, NULL, 0,
1571 NULL, HFILL }},
1572 { &hf_pres_presentation_requirements,
1573 { "presentation-requirements", "pres.presentation_requirements",
1574 FT_BYTES, BASE_NONE, NULL, 0,
1575 NULL, HFILL }},
1576 { &hf_pres_user_session_requirements,
1577 { "user-session-requirements", "pres.user_session_requirements",
1578 FT_BYTES, BASE_NONE, NULL, 0,
1579 NULL, HFILL }},
1580 { &hf_pres_protocol_options,
1581 { "protocol-options", "pres.protocol_options",
1582 FT_BYTES, BASE_NONE, NULL, 0,
1583 NULL, HFILL }},
1584 { &hf_pres_initiators_nominated_context,
1585 { "initiators-nominated-context", "pres.initiators_nominated_context",
1586 FT_INT32, BASE_DEC, NULL, 0,
1587 "Presentation_context_identifier", HFILL }},
1588 { &hf_pres_extensions,
1589 { "extensions", "pres.extensions_element",
1590 FT_NONE, BASE_NONE, NULL, 0,
1591 NULL, HFILL }},
1592 { &hf_pres_user_data,
1593 { "user-data", "pres.user_data",
1594 FT_UINT32, BASE_DEC, VALS(pres_User_data_vals), 0,
1595 NULL, HFILL }},
1596 { &hf_pres_cPR_PPDU_x400_mode_parameters,
1597 { "x410-mode-parameters", "pres.x410_mode_parameters_element",
1598 FT_NONE, BASE_NONE, NULL, 0,
1599 "RTOACapdu", HFILL }},
1600 { &hf_pres_cPU_PPDU_normal_mode_parameters,
1601 { "normal-mode-parameters", "pres.normal_mode_parameters_element",
1602 FT_NONE, BASE_NONE, NULL, 0,
1603 "T_CPA_PPDU_normal_mode_parameters", HFILL }},
1604 { &hf_pres_responding_presentation_selector,
1605 { "responding-presentation-selector", "pres.responding_presentation_selector",
1606 FT_BYTES, BASE_NONE, NULL, 0,
1607 NULL, HFILL }},
1608 { &hf_pres_presentation_context_definition_result_list,
1609 { "presentation-context-definition-result-list", "pres.presentation_context_definition_result_list",
1610 FT_UINT32, BASE_DEC, NULL, 0,
1611 NULL, HFILL }},
1612 { &hf_pres_responders_nominated_context,
1613 { "responders-nominated-context", "pres.responders_nominated_context",
1614 FT_INT32, BASE_DEC, NULL, 0,
1615 "Presentation_context_identifier", HFILL }},
1616 { &hf_pres_cPU_PPDU_x400_mode_parameters,
1617 { "x400-mode-parameters", "pres.x400_mode_parameters_element",
1618 FT_NONE, BASE_NONE, NULL, 0,
1619 "RTORJapdu", HFILL }},
1620 { &hf_pres_cPR_PPDU_normal_mode_parameters,
1621 { "normal-mode-parameters", "pres.normal_mode_parameters_element",
1622 FT_NONE, BASE_NONE, NULL, 0,
1623 "T_CPR_PPDU_normal_mode_parameters", HFILL }},
1624 { &hf_pres_default_context_result,
1625 { "default-context-result", "pres.default_context_result",
1626 FT_INT32, BASE_DEC, VALS(pres_Result_vals), 0,
1627 NULL, HFILL }},
1628 { &hf_pres_cPR_PPDU__provider_reason,
1629 { "provider-reason", "pres.provider_reason",
1630 FT_INT32, BASE_DEC, VALS(pres_Provider_reason_vals), 0,
1631 NULL, HFILL }},
1632 { &hf_pres_aru_ppdu,
1633 { "aru-ppdu", "pres.aru_ppdu",
1634 FT_UINT32, BASE_DEC, VALS(pres_ARU_PPDU_vals), 0,
1635 NULL, HFILL }},
1636 { &hf_pres_arp_ppdu,
1637 { "arp-ppdu", "pres.arp_ppdu_element",
1638 FT_NONE, BASE_NONE, NULL, 0,
1639 NULL, HFILL }},
1640 { &hf_pres_aRU_PPDU_x400_mode_parameters,
1641 { "x400-mode-parameters", "pres.x400_mode_parameters_element",
1642 FT_NONE, BASE_NONE, NULL, 0,
1643 "RTABapdu", HFILL }},
1644 { &hf_pres_aRU_PPDU_normal_mode_parameters,
1645 { "normal-mode-parameters", "pres.normal_mode_parameters_element",
1646 FT_NONE, BASE_NONE, NULL, 0,
1647 "T_ARU_PPDU_normal_mode_parameters", HFILL }},
1648 { &hf_pres_presentation_context_identifier_list,
1649 { "presentation-context-identifier-list", "pres.presentation_context_identifier_list",
1650 FT_UINT32, BASE_DEC, NULL, 0,
1651 NULL, HFILL }},
1652 { &hf_pres_aRU_PPDU_provider_reason,
1653 { "provider-reason", "pres.provider_reason",
1654 FT_INT32, BASE_DEC, VALS(pres_Abort_reason_vals), 0,
1655 "Abort_reason", HFILL }},
1656 { &hf_pres_event_identifier,
1657 { "event-identifier", "pres.event_identifier",
1658 FT_INT32, BASE_DEC, VALS(pres_Event_identifier_vals), 0,
1659 NULL, HFILL }},
1660 { &hf_pres_acPPDU,
1661 { "acPPDU", "pres.acPPDU_element",
1662 FT_NONE, BASE_NONE, NULL, 0,
1663 "AC_PPDU", HFILL }},
1664 { &hf_pres_acaPPDU,
1665 { "acaPPDU", "pres.acaPPDU_element",
1666 FT_NONE, BASE_NONE, NULL, 0,
1667 "ACA_PPDU", HFILL }},
1668 { &hf_pres_ttdPPDU,
1669 { "ttdPPDU", "pres.ttdPPDU",
1670 FT_UINT32, BASE_DEC, VALS(pres_User_data_vals), 0,
1671 "User_data", HFILL }},
1672 { &hf_pres_presentation_context_addition_list,
1673 { "presentation-context-addition-list", "pres.presentation_context_addition_list",
1674 FT_UINT32, BASE_DEC, NULL, 0,
1675 NULL, HFILL }},
1676 { &hf_pres_presentation_context_deletion_list,
1677 { "presentation-context-deletion-list", "pres.presentation_context_deletion_list",
1678 FT_UINT32, BASE_DEC, NULL, 0,
1679 NULL, HFILL }},
1680 { &hf_pres_presentation_context_addition_result_list,
1681 { "presentation-context-addition-result-list", "pres.presentation_context_addition_result_list",
1682 FT_UINT32, BASE_DEC, NULL, 0,
1683 NULL, HFILL }},
1684 { &hf_pres_presentation_context_deletion_result_list,
1685 { "presentation-context-deletion-result-list", "pres.presentation_context_deletion_result_list",
1686 FT_UINT32, BASE_DEC, NULL, 0,
1687 NULL, HFILL }},
1688 { &hf_pres_Context_list_item,
1689 { "Context-list item", "pres.Context_list_item_element",
1690 FT_NONE, BASE_NONE, NULL, 0,
1691 NULL, HFILL }},
1692 { &hf_pres_presentation_context_identifier,
1693 { "presentation-context-identifier", "pres.presentation_context_identifier",
1694 FT_INT32, BASE_DEC, NULL, 0,
1695 NULL, HFILL }},
1696 { &hf_pres_abstract_syntax_name,
1697 { "abstract-syntax-name", "pres.abstract_syntax_name",
1698 FT_OID, BASE_NONE, NULL, 0,
1699 NULL, HFILL }},
1700 { &hf_pres_transfer_syntax_name_list,
1701 { "transfer-syntax-name-list", "pres.transfer_syntax_name_list",
1702 FT_UINT32, BASE_DEC, NULL, 0,
1703 "SEQUENCE_OF_Transfer_syntax_name", HFILL }},
1704 { &hf_pres_transfer_syntax_name_list_item,
1705 { "Transfer-syntax-name", "pres.Transfer_syntax_name",
1706 FT_OID, BASE_NONE, NULL, 0,
1707 NULL, HFILL }},
1708 { &hf_pres_transfer_syntax_name,
1709 { "transfer-syntax-name", "pres.transfer_syntax_name",
1710 FT_OID, BASE_NONE, NULL, 0,
1711 NULL, HFILL }},
1712 { &hf_pres_mode_value,
1713 { "mode-value", "pres.mode_value",
1714 FT_INT32, BASE_DEC, VALS(pres_T_mode_value_vals), 0,
1715 NULL, HFILL }},
1716 { &hf_pres_Presentation_context_deletion_list_item,
1717 { "Presentation-context-identifier", "pres.Presentation_context_identifier",
1718 FT_INT32, BASE_DEC, NULL, 0,
1719 NULL, HFILL }},
1720 { &hf_pres_Presentation_context_deletion_result_list_item,
1721 { "Presentation-context-deletion-result-list item", "pres.Presentation_context_deletion_result_list_item",
1722 FT_INT32, BASE_DEC, VALS(pres_Presentation_context_deletion_result_list_item_vals), 0,
1723 NULL, HFILL }},
1724 { &hf_pres_Presentation_context_identifier_list_item,
1725 { "Presentation-context-identifier-list item", "pres.Presentation_context_identifier_list_item_element",
1726 FT_NONE, BASE_NONE, NULL, 0,
1727 NULL, HFILL }},
1728 { &hf_pres_Result_list_item,
1729 { "Result-list item", "pres.Result_list_item_element",
1730 FT_NONE, BASE_NONE, NULL, 0,
1731 NULL, HFILL }},
1732 { &hf_pres_result,
1733 { "result", "pres.result",
1734 FT_INT32, BASE_DEC, VALS(pres_Result_vals), 0,
1735 NULL, HFILL }},
1736 { &hf_pres_provider_reason,
1737 { "provider-reason", "pres.provider_reason",
1738 FT_INT32, BASE_DEC, VALS(pres_T_provider_reason_vals), 0,
1739 NULL, HFILL }},
1740 { &hf_pres_simply_encoded_data,
1741 { "simply-encoded-data", "pres.simply_encoded_data",
1742 FT_BYTES, BASE_NONE, NULL, 0,
1743 NULL, HFILL }},
1744 { &hf_pres_fully_encoded_data,
1745 { "fully-encoded-data", "pres.fully_encoded_data",
1746 FT_UINT32, BASE_DEC, NULL, 0,
1747 NULL, HFILL }},
1748 { &hf_pres_Fully_encoded_data_item,
1749 { "PDV-list", "pres.PDV_list_element",
1750 FT_NONE, BASE_NONE, NULL, 0,
1751 NULL, HFILL }},
1752 { &hf_pres_presentation_data_values,
1753 { "presentation-data-values", "pres.presentation_data_values",
1754 FT_UINT32, BASE_DEC, VALS(pres_T_presentation_data_values_vals), 0,
1755 NULL, HFILL }},
1756 { &hf_pres_single_ASN1_type,
1757 { "single-ASN1-type", "pres.single_ASN1_type_element",
1758 FT_NONE, BASE_NONE, NULL, 0,
1759 NULL, HFILL }},
1760 { &hf_pres_octet_aligned,
1761 { "octet-aligned", "pres.octet_aligned",
1762 FT_BYTES, BASE_NONE, NULL, 0,
1763 "T_octet_aligned", HFILL }},
1764 { &hf_pres_arbitrary,
1765 { "arbitrary", "pres.arbitrary",
1766 FT_BYTES, BASE_NONE, NULL, 0,
1767 "BIT_STRING", HFILL }},
1768 { &hf_pres_Presentation_requirements_context_management,
1769 { "context-management", "pres.context-management",
1770 FT_BOOLEAN, 8, NULL, 0x80,
1771 NULL, HFILL }},
1772 { &hf_pres_Presentation_requirements_restoration,
1773 { "restoration", "pres.restoration",
1774 FT_BOOLEAN, 8, NULL, 0x40,
1775 NULL, HFILL }},
1776 { &hf_pres_Protocol_options_nominated_context,
1777 { "nominated-context", "pres.nominated-context",
1778 FT_BOOLEAN, 8, NULL, 0x80,
1779 NULL, HFILL }},
1780 { &hf_pres_Protocol_options_short_encoding,
1781 { "short-encoding", "pres.short-encoding",
1782 FT_BOOLEAN, 8, NULL, 0x40,
1783 NULL, HFILL }},
1784 { &hf_pres_Protocol_options_packed_encoding_rules,
1785 { "packed-encoding-rules", "pres.packed-encoding-rules",
1786 FT_BOOLEAN, 8, NULL, 0x20,
1787 NULL, HFILL }},
1788 { &hf_pres_Protocol_version_version_1,
1789 { "version-1", "pres.version-1",
1790 FT_BOOLEAN, 8, NULL, 0x80,
1791 NULL, HFILL }},
1792 { &hf_pres_User_session_requirements_half_duplex,
1793 { "half-duplex", "pres.half-duplex",
1794 FT_BOOLEAN, 8, NULL, 0x80,
1795 NULL, HFILL }},
1796 { &hf_pres_User_session_requirements_duplex,
1797 { "duplex", "pres.duplex",
1798 FT_BOOLEAN, 8, NULL, 0x40,
1799 NULL, HFILL }},
1800 { &hf_pres_User_session_requirements_expedited_data,
1801 { "expedited-data", "pres.expedited-data",
1802 FT_BOOLEAN, 8, NULL, 0x20,
1803 NULL, HFILL }},
1804 { &hf_pres_User_session_requirements_minor_synchronize,
1805 { "minor-synchronize", "pres.minor-synchronize",
1806 FT_BOOLEAN, 8, NULL, 0x10,
1807 NULL, HFILL }},
1808 { &hf_pres_User_session_requirements_major_synchronize,
1809 { "major-synchronize", "pres.major-synchronize",
1810 FT_BOOLEAN, 8, NULL, 0x08,
1811 NULL, HFILL }},
1812 { &hf_pres_User_session_requirements_resynchronize,
1813 { "resynchronize", "pres.resynchronize",
1814 FT_BOOLEAN, 8, NULL, 0x04,
1815 NULL, HFILL }},
1816 { &hf_pres_User_session_requirements_activity_management,
1817 { "activity-management", "pres.activity-management",
1818 FT_BOOLEAN, 8, NULL, 0x02,
1819 NULL, HFILL }},
1820 { &hf_pres_User_session_requirements_negotiated_release,
1821 { "negotiated-release", "pres.negotiated-release",
1822 FT_BOOLEAN, 8, NULL, 0x01,
1823 NULL, HFILL }},
1824 { &hf_pres_User_session_requirements_capability_data,
1825 { "capability-data", "pres.capability-data",
1826 FT_BOOLEAN, 8, NULL, 0x80,
1827 NULL, HFILL }},
1828 { &hf_pres_User_session_requirements_exceptions,
1829 { "exceptions", "pres.exceptions",
1830 FT_BOOLEAN, 8, NULL, 0x40,
1831 NULL, HFILL }},
1832 { &hf_pres_User_session_requirements_typed_data,
1833 { "typed-data", "pres.typed-data",
1834 FT_BOOLEAN, 8, NULL, 0x20,
1835 NULL, HFILL }},
1836 { &hf_pres_User_session_requirements_symmetric_synchronize,
1837 { "symmetric-synchronize", "pres.symmetric-synchronize",
1838 FT_BOOLEAN, 8, NULL, 0x10,
1839 NULL, HFILL }},
1840 { &hf_pres_User_session_requirements_data_separation,
1841 { "data-separation", "pres.data-separation",
1842 FT_BOOLEAN, 8, NULL, 0x08,
1843 NULL, HFILL }},
1845 /*--- End of included file: packet-pres-hfarr.c ---*/
1846 #line 397 "../../asn1/pres/packet-pres-template.c"
1849 /* List of subtrees */
1850 static gint *ett[] = {
1851 &ett_pres,
1853 /*--- Included file: packet-pres-ettarr.c ---*/
1854 #line 1 "../../asn1/pres/packet-pres-ettarr.c"
1855 &ett_pres_CP_type,
1856 &ett_pres_T_normal_mode_parameters,
1857 &ett_pres_T_extensions,
1858 &ett_pres_CPA_PPDU,
1859 &ett_pres_T_CPA_PPDU_normal_mode_parameters,
1860 &ett_pres_CPR_PPDU,
1861 &ett_pres_T_CPR_PPDU_normal_mode_parameters,
1862 &ett_pres_Abort_type,
1863 &ett_pres_ARU_PPDU,
1864 &ett_pres_T_ARU_PPDU_normal_mode_parameters,
1865 &ett_pres_ARP_PPDU,
1866 &ett_pres_Typed_data_type,
1867 &ett_pres_AC_PPDU,
1868 &ett_pres_ACA_PPDU,
1869 &ett_pres_RS_PPDU,
1870 &ett_pres_RSA_PPDU,
1871 &ett_pres_Context_list,
1872 &ett_pres_Context_list_item,
1873 &ett_pres_SEQUENCE_OF_Transfer_syntax_name,
1874 &ett_pres_Default_context_name,
1875 &ett_pres_Mode_selector,
1876 &ett_pres_Presentation_context_deletion_list,
1877 &ett_pres_Presentation_context_deletion_result_list,
1878 &ett_pres_Presentation_context_identifier_list,
1879 &ett_pres_Presentation_context_identifier_list_item,
1880 &ett_pres_Presentation_requirements,
1881 &ett_pres_Protocol_options,
1882 &ett_pres_Protocol_version,
1883 &ett_pres_Result_list,
1884 &ett_pres_Result_list_item,
1885 &ett_pres_User_data,
1886 &ett_pres_Fully_encoded_data,
1887 &ett_pres_PDV_list,
1888 &ett_pres_T_presentation_data_values,
1889 &ett_pres_User_session_requirements,
1890 &ett_pres_UD_type,
1892 /*--- End of included file: packet-pres-ettarr.c ---*/
1893 #line 403 "../../asn1/pres/packet-pres-template.c"
1896 static ei_register_info ei[] = {
1897 { &ei_pres_dissector_not_available, { "pres.dissector_not_available", PI_UNDECODED, PI_WARN, "Dissector is not available", EXPFILL }},
1900 static uat_field_t users_flds[] = {
1901 UAT_FLD_DEC(pres_users,ctx_id,"Context Id","Presentation Context Identifier"),
1902 UAT_FLD_CSTRING(pres_users,oid,"Syntax Name OID","Abstract Syntax Name (Object Identifier)"),
1903 UAT_END_FIELDS
1906 uat_t* users_uat = uat_new("PRES Users Context List",
1907 sizeof(pres_user_t),
1908 "pres_context_list",
1909 TRUE,
1910 (void**) &pres_users,
1911 &num_pres_users,
1912 UAT_AFFECTS_DISSECTION, /* affects dissection of packets, but not set of named fields */
1913 "ChPresContextList",
1914 pres_copy_cb,
1915 NULL,
1916 pres_free_cb,
1917 NULL,
1918 users_flds);
1920 expert_module_t* expert_pres;
1921 module_t *pres_module;
1923 /* Register protocol */
1924 proto_pres = proto_register_protocol(PNAME, PSNAME, PFNAME);
1925 new_register_dissector("pres", dissect_pres, proto_pres);
1927 /* Register connectionless protocol (just for the description) */
1928 proto_clpres = proto_register_protocol(CLPNAME, CLPSNAME, CLPFNAME);
1930 /* Register fields and subtrees */
1931 proto_register_field_array(proto_pres, hf, array_length(hf));
1932 proto_register_subtree_array(ett, array_length(ett));
1933 expert_pres = expert_register_protocol(proto_pres);
1934 expert_register_field_array(expert_pres, ei, array_length(ei));
1935 register_init_routine(pres_init);
1937 pres_module = prefs_register_protocol(proto_pres, NULL);
1939 prefs_register_uat_preference(pres_module, "users_table", "Users Context List",
1940 "A table that enumerates user protocols to be used against"
1941 " specific presentation context identifiers",
1942 users_uat);
1946 /*--- proto_reg_handoff_pres ---------------------------------------*/
1947 void proto_reg_handoff_pres(void) {
1949 /* register_ber_oid_dissector("0.4.0.0.1.1.1.1", dissect_pres, proto_pres,
1950 "itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) gsm-Network(1) abstractSyntax(1) pres(1) version1(1)"); */