1 /* Do not modify this file. Changes will be overwritten. */
2 /* Generated automatically by the ASN.1 to Wireshark dissector compiler */
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"
10 * Routine to dissect ISO 8823 OSI Presentation Protocol packets
11 * Based on the dissector by
12 * Yuriy Sidelnikov <YSidelnikov@hotmail.com>
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.
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>
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"
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
{
83 static GHashTable
*pres_ctx_oid_table
= NULL
;
85 typedef struct _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 */
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
)
236 pres_ctx_oid_hash(gconstpointer k
)
238 pres_ctx_oid_t
*pco
=(pres_ctx_oid_t
*)k
;
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
);
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
,
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
;
269 /* we did not get any oid name, malformed packet? */
273 pco
=wmem_new(wmem_file_scope(), pres_ctx_oid_t
);
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);
279 pco
->index
= conversation
->index
;
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
);
287 g_hash_table_remove(pres_ctx_oid_table
, tmppco
);
290 g_hash_table_insert(pres_ctx_oid_table
, pco
, pco
);
294 find_oid_in_users_table(packet_info
*pinfo
, guint32 ctx_id
)
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
);
312 find_oid_by_pres_ctx_id(packet_info
*pinfo
, guint32 idx
)
314 pres_ctx_oid_t pco
, *tmppco
;
315 conversation_t
*conversation
;
318 conversation
=find_conversation (pinfo
->fd
->num
, &pinfo
->src
, &pinfo
->dst
,
319 pinfo
->ptype
, pinfo
->srcport
, pinfo
->destport
, 0);
321 pco
.index
= conversation
->index
;
326 tmppco
=(pres_ctx_oid_t
*)g_hash_table_lookup(pres_ctx_oid_table
, &pco
);
331 return find_oid_in_users_table(pinfo
, idx
);
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
);
347 pres_free_cb(void *r
)
349 pres_user_t
*u
= (pres_user_t
*)r
;
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" },
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
,
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
}
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
);
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
}
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
,
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
,
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
);
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
);
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"
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
);
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
);
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
);
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
);
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
},
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
);
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
}
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
);
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
},
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
);
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
);
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
}
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
);
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
}
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
,
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
}
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
,
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
}
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
,
609 static const ber_sequence_t T_extensions_sequence
[] = {
610 { NULL
, 0, 0, 0, NULL
}
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
);
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
,
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"
640 oid
=find_oid_by_pres_ctx_id(actx
->pinfo
, presentation_context_identifier
);
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
);
645 proto_tree_add_expert(tree
, actx
->pinfo
, &ei_pres_dissector_not_available
,
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"
663 oid
=find_oid_by_pres_ctx_id(actx
->pinfo
, presentation_context_identifier
);
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
);
668 proto_tree_add_expert(tree
, actx
->pinfo
, &ei_pres_dissector_not_available
,
670 offset
= dissect_ber_octet_string(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
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
,
693 static const value_string pres_T_presentation_data_values_vals
[] = {
694 { 0, "single-ASN1-type" },
695 { 1, "octet-aligned" },
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
}
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
,
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
}
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
);
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
},
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
);
746 static const value_string pres_User_data_vals
[] = {
747 { 0, "simply-encoded-data" },
748 { 1, "fully-encoded-data" },
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
}
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
,
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
}
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
);
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
}
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
);
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
);
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
);
826 static const value_string pres_Result_vals
[] = {
828 { 1, "user-rejection" },
829 { 2, "provider-rejection" },
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
,
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" },
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
,
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
}
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
);
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
},
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
);
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
);
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
}
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
);
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
}
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
);
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
);
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" },
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
,
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
}
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
);
986 static const value_string pres_CPR_PPDU_vals
[] = {
987 { 0, "x400-mode-parameters" },
988 { 1, "normal-mode-parameters" },
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
}
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
,
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
}
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
);
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
},
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
);
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
}
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
);
1051 static const value_string pres_ARU_PPDU_vals
[] = {
1052 { 0, "x400-mode-parameters" },
1053 { 1, "normal-mode-parameters" },
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
}
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
,
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" },
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"
1090 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
1094 col_append_fstr(actx
->pinfo
->cinfo
, COL_INFO
, " (%s)", val_to_str(reason
, pres_Abort_reason_vals
, "unknown: %d"));
1102 static const value_string pres_Event_identifier_vals
[] = {
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" },
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
,
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
}
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
);
1164 static const value_string pres_Abort_type_vals
[] = {
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
}
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
,
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
);
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
},
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
);
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
}
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
);
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
);
1233 static const value_string pres_Presentation_context_deletion_result_list_item_vals
[] = {
1234 { 0, "acceptance" },
1235 { 1, "user-rejection" },
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
,
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
},
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
);
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
}
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
);
1278 static const value_string pres_Typed_data_type_vals
[] = {
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
}
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
,
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
}
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
);
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
}
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
);
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
}
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
);
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"
1367 dissect_ppdu(tvbuff_t
*tvb
, int offset
, packet_info
*pinfo
, proto_tree
*tree
, struct SESSION_DATA_STRUCTURE
* local_session
)
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.");
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
);
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
);
1402 case SES_CONNECTION_ACCEPT
:
1403 offset
= dissect_pres_CPA_PPDU(FALSE
, tvb
, offset
, &asn1_ctx
, pres_tree
, hf_pres_CPA_PPDU
);
1406 case SES_ABORT_ACCEPT
:
1407 offset
= dissect_pres_Abort_type(FALSE
, tvb
, offset
, &asn1_ctx
, pres_tree
, hf_pres_Abort_type
);
1409 case SES_DATA_TRANSFER
:
1410 offset
= dissect_pres_CPC_type(FALSE
, tvb
, offset
, &asn1_ctx
, pres_tree
, hf_pres_user_data
);
1412 case SES_TYPED_DATA
:
1413 offset
= dissect_pres_Typed_data_type(FALSE
, tvb
, offset
, &asn1_ctx
, pres_tree
, hf_pres_Typed_data_type
);
1415 case SES_RESYNCHRONIZE
:
1416 offset
= dissect_pres_RS_PPDU(FALSE
, tvb
, offset
, &asn1_ctx
, pres_tree
, -1);
1418 case SES_RESYNCHRONIZE_ACK
:
1419 offset
= dissect_pres_RSA_PPDU(FALSE
, tvb
, offset
, &asn1_ctx
, pres_tree
, -1);
1422 offset
= dissect_pres_CPR_PPDU(FALSE
, tvb
, offset
, &asn1_ctx
, pres_tree
, hf_pres_CPR_PPDU
);
1425 offset
= dissect_pres_CPC_type(FALSE
, tvb
, offset
, &asn1_ctx
, pres_tree
, hf_pres_user_data
);
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
;
1461 col_set_str(pinfo
->cinfo
, COL_PROTOCOL
, "CL-PRES");
1462 col_clear(pinfo
->cinfo
, COL_INFO
);
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
);
1485 call_ber_oid_callback (oid
, tvb
, offset
, pinfo
, parent_tree
, session
);
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
[] = {
1512 { "CP-type", "pres.cptype",
1513 FT_NONE
, BASE_NONE
, NULL
, 0,
1515 { &hf_pres_CPA_PPDU
,
1516 { "CPA-PPDU", "pres.cpapdu",
1517 FT_NONE
, BASE_NONE
, NULL
, 0,
1519 { &hf_pres_Abort_type
,
1520 { "Abort type", "pres.aborttype",
1521 FT_UINT32
, BASE_DEC
, VALS(pres_Abort_type_vals
), 0,
1523 { &hf_pres_CPR_PPDU
,
1524 { "CPR-PPDU", "pres.cprtype",
1525 FT_UINT32
, BASE_DEC
, VALS(pres_CPR_PPDU_vals
), 0,
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,
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,
1540 { &hf_pres_mode_selector
,
1541 { "mode-selector", "pres.mode_selector_element",
1542 FT_NONE
, BASE_NONE
, NULL
, 0,
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,
1552 { &hf_pres_protocol_version
,
1553 { "protocol-version", "pres.protocol_version",
1554 FT_BYTES
, BASE_NONE
, NULL
, 0,
1556 { &hf_pres_calling_presentation_selector
,
1557 { "calling-presentation-selector", "pres.calling_presentation_selector",
1558 FT_BYTES
, BASE_NONE
, NULL
, 0,
1560 { &hf_pres_called_presentation_selector
,
1561 { "called-presentation-selector", "pres.called_presentation_selector",
1562 FT_BYTES
, BASE_NONE
, NULL
, 0,
1564 { &hf_pres_presentation_context_definition_list
,
1565 { "presentation-context-definition-list", "pres.presentation_context_definition_list",
1566 FT_UINT32
, BASE_DEC
, NULL
, 0,
1568 { &hf_pres_default_context_name
,
1569 { "default-context-name", "pres.default_context_name_element",
1570 FT_NONE
, BASE_NONE
, NULL
, 0,
1572 { &hf_pres_presentation_requirements
,
1573 { "presentation-requirements", "pres.presentation_requirements",
1574 FT_BYTES
, BASE_NONE
, NULL
, 0,
1576 { &hf_pres_user_session_requirements
,
1577 { "user-session-requirements", "pres.user_session_requirements",
1578 FT_BYTES
, BASE_NONE
, NULL
, 0,
1580 { &hf_pres_protocol_options
,
1581 { "protocol-options", "pres.protocol_options",
1582 FT_BYTES
, BASE_NONE
, NULL
, 0,
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,
1592 { &hf_pres_user_data
,
1593 { "user-data", "pres.user_data",
1594 FT_UINT32
, BASE_DEC
, VALS(pres_User_data_vals
), 0,
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,
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,
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,
1628 { &hf_pres_cPR_PPDU__provider_reason
,
1629 { "provider-reason", "pres.provider_reason",
1630 FT_INT32
, BASE_DEC
, VALS(pres_Provider_reason_vals
), 0,
1632 { &hf_pres_aru_ppdu
,
1633 { "aru-ppdu", "pres.aru_ppdu",
1634 FT_UINT32
, BASE_DEC
, VALS(pres_ARU_PPDU_vals
), 0,
1636 { &hf_pres_arp_ppdu
,
1637 { "arp-ppdu", "pres.arp_ppdu_element",
1638 FT_NONE
, BASE_NONE
, NULL
, 0,
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,
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,
1661 { "acPPDU", "pres.acPPDU_element",
1662 FT_NONE
, BASE_NONE
, NULL
, 0,
1663 "AC_PPDU", HFILL
}},
1665 { "acaPPDU", "pres.acaPPDU_element",
1666 FT_NONE
, BASE_NONE
, NULL
, 0,
1667 "ACA_PPDU", HFILL
}},
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,
1676 { &hf_pres_presentation_context_deletion_list
,
1677 { "presentation-context-deletion-list", "pres.presentation_context_deletion_list",
1678 FT_UINT32
, BASE_DEC
, NULL
, 0,
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,
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,
1688 { &hf_pres_Context_list_item
,
1689 { "Context-list item", "pres.Context_list_item_element",
1690 FT_NONE
, BASE_NONE
, NULL
, 0,
1692 { &hf_pres_presentation_context_identifier
,
1693 { "presentation-context-identifier", "pres.presentation_context_identifier",
1694 FT_INT32
, BASE_DEC
, NULL
, 0,
1696 { &hf_pres_abstract_syntax_name
,
1697 { "abstract-syntax-name", "pres.abstract_syntax_name",
1698 FT_OID
, BASE_NONE
, NULL
, 0,
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,
1708 { &hf_pres_transfer_syntax_name
,
1709 { "transfer-syntax-name", "pres.transfer_syntax_name",
1710 FT_OID
, BASE_NONE
, NULL
, 0,
1712 { &hf_pres_mode_value
,
1713 { "mode-value", "pres.mode_value",
1714 FT_INT32
, BASE_DEC
, VALS(pres_T_mode_value_vals
), 0,
1716 { &hf_pres_Presentation_context_deletion_list_item
,
1717 { "Presentation-context-identifier", "pres.Presentation_context_identifier",
1718 FT_INT32
, BASE_DEC
, NULL
, 0,
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,
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,
1728 { &hf_pres_Result_list_item
,
1729 { "Result-list item", "pres.Result_list_item_element",
1730 FT_NONE
, BASE_NONE
, NULL
, 0,
1733 { "result", "pres.result",
1734 FT_INT32
, BASE_DEC
, VALS(pres_Result_vals
), 0,
1736 { &hf_pres_provider_reason
,
1737 { "provider-reason", "pres.provider_reason",
1738 FT_INT32
, BASE_DEC
, VALS(pres_T_provider_reason_vals
), 0,
1740 { &hf_pres_simply_encoded_data
,
1741 { "simply-encoded-data", "pres.simply_encoded_data",
1742 FT_BYTES
, BASE_NONE
, NULL
, 0,
1744 { &hf_pres_fully_encoded_data
,
1745 { "fully-encoded-data", "pres.fully_encoded_data",
1746 FT_UINT32
, BASE_DEC
, NULL
, 0,
1748 { &hf_pres_Fully_encoded_data_item
,
1749 { "PDV-list", "pres.PDV_list_element",
1750 FT_NONE
, BASE_NONE
, NULL
, 0,
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,
1756 { &hf_pres_single_ASN1_type
,
1757 { "single-ASN1-type", "pres.single_ASN1_type_element",
1758 FT_NONE
, BASE_NONE
, NULL
, 0,
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,
1772 { &hf_pres_Presentation_requirements_restoration
,
1773 { "restoration", "pres.restoration",
1774 FT_BOOLEAN
, 8, NULL
, 0x40,
1776 { &hf_pres_Protocol_options_nominated_context
,
1777 { "nominated-context", "pres.nominated-context",
1778 FT_BOOLEAN
, 8, NULL
, 0x80,
1780 { &hf_pres_Protocol_options_short_encoding
,
1781 { "short-encoding", "pres.short-encoding",
1782 FT_BOOLEAN
, 8, NULL
, 0x40,
1784 { &hf_pres_Protocol_options_packed_encoding_rules
,
1785 { "packed-encoding-rules", "pres.packed-encoding-rules",
1786 FT_BOOLEAN
, 8, NULL
, 0x20,
1788 { &hf_pres_Protocol_version_version_1
,
1789 { "version-1", "pres.version-1",
1790 FT_BOOLEAN
, 8, NULL
, 0x80,
1792 { &hf_pres_User_session_requirements_half_duplex
,
1793 { "half-duplex", "pres.half-duplex",
1794 FT_BOOLEAN
, 8, NULL
, 0x80,
1796 { &hf_pres_User_session_requirements_duplex
,
1797 { "duplex", "pres.duplex",
1798 FT_BOOLEAN
, 8, NULL
, 0x40,
1800 { &hf_pres_User_session_requirements_expedited_data
,
1801 { "expedited-data", "pres.expedited-data",
1802 FT_BOOLEAN
, 8, NULL
, 0x20,
1804 { &hf_pres_User_session_requirements_minor_synchronize
,
1805 { "minor-synchronize", "pres.minor-synchronize",
1806 FT_BOOLEAN
, 8, NULL
, 0x10,
1808 { &hf_pres_User_session_requirements_major_synchronize
,
1809 { "major-synchronize", "pres.major-synchronize",
1810 FT_BOOLEAN
, 8, NULL
, 0x08,
1812 { &hf_pres_User_session_requirements_resynchronize
,
1813 { "resynchronize", "pres.resynchronize",
1814 FT_BOOLEAN
, 8, NULL
, 0x04,
1816 { &hf_pres_User_session_requirements_activity_management
,
1817 { "activity-management", "pres.activity-management",
1818 FT_BOOLEAN
, 8, NULL
, 0x02,
1820 { &hf_pres_User_session_requirements_negotiated_release
,
1821 { "negotiated-release", "pres.negotiated-release",
1822 FT_BOOLEAN
, 8, NULL
, 0x01,
1824 { &hf_pres_User_session_requirements_capability_data
,
1825 { "capability-data", "pres.capability-data",
1826 FT_BOOLEAN
, 8, NULL
, 0x80,
1828 { &hf_pres_User_session_requirements_exceptions
,
1829 { "exceptions", "pres.exceptions",
1830 FT_BOOLEAN
, 8, NULL
, 0x40,
1832 { &hf_pres_User_session_requirements_typed_data
,
1833 { "typed-data", "pres.typed-data",
1834 FT_BOOLEAN
, 8, NULL
, 0x20,
1836 { &hf_pres_User_session_requirements_symmetric_synchronize
,
1837 { "symmetric-synchronize", "pres.symmetric-synchronize",
1838 FT_BOOLEAN
, 8, NULL
, 0x10,
1840 { &hf_pres_User_session_requirements_data_separation
,
1841 { "data-separation", "pres.data-separation",
1842 FT_BOOLEAN
, 8, NULL
, 0x08,
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
[] = {
1853 /*--- Included file: packet-pres-ettarr.c ---*/
1854 #line 1 "../../asn1/pres/packet-pres-ettarr.c"
1856 &ett_pres_T_normal_mode_parameters
,
1857 &ett_pres_T_extensions
,
1859 &ett_pres_T_CPA_PPDU_normal_mode_parameters
,
1861 &ett_pres_T_CPR_PPDU_normal_mode_parameters
,
1862 &ett_pres_Abort_type
,
1864 &ett_pres_T_ARU_PPDU_normal_mode_parameters
,
1866 &ett_pres_Typed_data_type
,
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
,
1888 &ett_pres_T_presentation_data_values
,
1889 &ett_pres_User_session_requirements
,
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)"),
1906 uat_t
* users_uat
= uat_new("PRES Users Context List",
1907 sizeof(pres_user_t
),
1908 "pres_context_list",
1910 (void**) &pres_users
,
1912 UAT_AFFECTS_DISSECTION
, /* affects dissection of packets, but not set of named fields */
1913 "ChPresContextList",
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",
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)"); */